java中map什么意思,java中map<key,value>是什么意思
大家好,今天来为大家分享java中map什么意思的一些知识点,和java中map<key,value>是什么意思的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
java中map<key,value>是什么意思
java中map<key,value>是泛型的典型样式。
key和value代表键和值,你可以想象成两个值一一对应,可以根据key查找到value的值。你可以把省作为key,省会作为value,根据省可以查到省会。或者把整数作为key,任何对象作为value,就和数组一样根据整数能找到对应的对象。
Map<String,int>就表示这个 map的key是String类型 value是 int类,就是强制设计期就限定map里面元素的类型.
JDK 5.0中增加的泛型类型,是 Java语言中类型安全的一次重要改进。
泛型编程(Generic Programming)最初提出时的动机很简单直接:发明一种语言机制,能够帮助实现一个通用的标准容器库。所谓通用的标准容器库,就是要能够做到,比如用一个List类存放所有可能类型的对象,这样的事情;
更多内容请参考《java泛型详解_百度百科》
java中Map<,>是什么意思
<?,?>这个是泛型,在实例应用的时候,一个集合一般只存储一种类型的数据,所以我们可以通过泛型来约束集合中元素的类型,这个在多处都可以使用,比如在Collection<T>集合和Map<T,T>中通过泛型约束存储元素的数据类型;
以下解释为什么泛型中只使用对象来约束数据类型:
因为集合只能存储引用类型数据,所以在泛型中的参数都是对象,如果后面对应的是基本数据类型,那就要在泛型中把基本数据类型转换成包装类对象,即使不是集合,比如Comparator<T>比较器里面的T也应该要是对象的吧,所以我认为泛型中是使用对象进行数据类型的约束的,个人观点,可以讨论,但不要骂人的哈!
javajava中Map类有什么作用,具体怎么用
Map.Entry--Map的内部类,描述Map中的按键/数值对。
SortedMap---扩展Map,使按键保持升序排列
下面以HashMap为例。
public static void main(String args[]){HashMap hashmap= new HashMap();
hashmap.put("Item0","Value0");
hashmap.put("Item1","Value1");
hashmap.put("Item2","Value2");
hashmap.put("Item3","Value3");
Set set= hashmap.entrySet();
Iterator iterator= set.iterator();
while(iterator.hasNext(){Map.Entry mapentry=(Map.Entry) iterator.next();
System.out.println(mapentry.getkey()+"/"+ mapentry.getValue());}}注意,这里Map的按键必须是唯一的,比如说不能有两个按键都为null。
如果用过它,就会知道它的用处了。资料:java.util中的集合类包含 Java中某些最常用的类。最常用的集合类是 List和 Map。 List的具体实现包括 ArrayList和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 List适用于按数值索引访问元素的情形。 Map提供了一个更通用的元素存储方法。 Map集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。从概念上而言,您可以将 List看作是具有数值键的 Map。而实际上,除了 List和 Map都在定义 java.util中外,两者并没有直接的联系。本文将着重介绍核心 Java发行套件中附带的 Map,同时还将介绍如何采用或实现更适用于您应用程序特定数据的专用 Map。 Java核心类中有很多预定义的 Map类。在介绍具体实现之前,我们先介绍一下 Map接口本身,以便了解所有实现的共同点。 Map接口定义了四种类型的方法,每个 Map都包含这些方法。下面,我们从两个普通的方法(表 1)开始对这些方法加以介绍。 put(Object key, Object value)将指定值与指定键相关联
尽管您可能注意到,纵然假设忽略构建一个需要传递给 putAll()的 Map的开销,使用 putAll()通常也并不比使用大量的 put()调用更有效率,但 putAll()的存在一点也不稀奇。这是因为,putAll()除了迭代 put()所执行的将每个键值对添加到 Map的算法以外,还需要迭代所传递的 Map的元素。但应注意,putAll()在添加所有元素之前可以正确调整 Map的大小,因此如果您未亲自调整 Map的大小(我们将对此进行简单介绍),则 putAll()可能比预期的更有效。迭代Map中的元素不存在直接了当的方法。如果要查询某个 Map以了解其哪些元素满足特定查询,或如果要迭代其所有元素(无论原因如何),则您首先需要获取该 Map的“视图”。有三种可能的视图(参见表 3)前两个视图均返回 Set对象,第三个视图返回 Collection对象。就这两种情况而言,问题到这里并没有结束,这是因为您无法直接迭代 Collection对象或 Set对象。要进行迭代,您必须获得一个 Iterator对象。因此,要迭代 Map的元素,必须进行比较烦琐的编码 Iterator keyValuePairs= aMap.entrySet().iterator();Iterator keys= aMap.keySet().iterator();Iterator values= aMap.values().iterator();
值得注意的是,这些对象(Set、Collection和 Iterator)实际上是基础 Map的视图,而不是包含所有元素的副本。这使它们的使用效率很高。另一方面,Collection或 Set对象的 toArray()方法却创建包含 Map所有元素的数组对象,因此除了确实需要使用数组中元素的情形外,其效率并不高。我运行了一个小测试(随附文件中的 Test1),该测试使用了 HashMap,并使用以下两种方法对迭代 Map元素的开销进行了比较: int mapsize= aMap.size();Iterator keyValuePairs1= aMap.entrySet().iterator();for(int i= 0; i< mapsize; i++){ Map.Entry entry=(Map.Entry) keyValuePairs1.next(); Object key= entry.getKey(); Object value= entry.getValue();...}Object[] keyValuePairs2= aMap.entrySet().toArray();for(int i= 0; i< rem; i++){{ Map.Entry entry=(Map.Entry) keyValuePairs2[i]; Object key= entry.getKey(); Profilers in Oracle JDeveloperOracle JDeveloper包含一个嵌入的监测器,它测量内存和执行时间,使您能够快速识别代码中的瓶颈。我曾使用 Jdeveloper的执行监测器监测 HashMap的 containsKey()和 containsValue()方法,并很快发现 containsKey()方法的速度比 containsValue()方法慢很多(实际上要慢几个数量级!)。(参见图 1和图 2,以及随附文件中的 Test2类)。 Object value= entry.getValue();...}
此测试使用了两种测量方法:一种是测量迭代元素的时间,另一种测量使用 toArray调用创建数组的其他开销。第一种方法(忽略创建数组所需的时间)表明,使用已从 toArray调用中创建的数组迭代元素的速度要比使用 Iterator的速度大约快 30%-60%。但如果将使用 toArray方法创建数组的开销包含在内,则使用 Iterator实际上要快 10%-20%。因此,如果由于某种原因要创建一个集合元素的数组而非迭代这些元素,则应使用该数组迭代元素。但如果您不需要此中间数组,则不要创建它,而是使用 Iterator迭代元素。表3:返回视图的 Map方法:使用这些方法返回的对象,您可以遍历 Map的元素,还可以删除 Map中的元素。 entrySet()返回 Map中所包含映射的 Set视图。 Set中的每个元素都是一个 Map.Entry对象,可以使用 getKey()和 getValue()方法(还有一个 setValue()方法)访问后者的键元素和值元素keySet()返回 Map中所包含键的 Set视图。删除 Set中的元素还将删除 Map中相应的映射(键和值)values()返回 map中所包含值的 Collection视图。删除 Collection中的元素还将删除 Map中相应的映射(键和值)
表4中列出了 Map访问方法。Map通常适合按键(而非按值)进行访问。 Map定义中没有规定这肯定是真的,但通常您可以期望这是真的。例如,您可以期望 containsKey()方法与 get()方法一样快。另一方面,containsValue()方法很可能需要扫描 Map中的值,因此它的速度可能比较慢。 containsKey(Object key)如果 Map包含指定键的映射,则返回 truecontainsValue(Object value)如果此 Map将一个或多个键映射到指定值,则返回 true
对使用 containsKey()和 containsValue()遍历 HashMap中所有元素所需时间的测试表明,containsValue()所需的时间要长很多。实际上要长几个数量级!(参见图 1和图 2,以及随附文件中的 Test2)。因此,如果 containsValue()是应用程序中的性能问题,它将很快显现出来,并可以通过监测您的应用程序轻松地将其识别。这种情况下,我相信您能够想出一个有效的替换方法来实现 containsValue()提供的等效功能。但如果想不出办法,则一个可行的解决方案是再创建一个 Map,并将第一个 Map的所有值作为键。这样,第一个 Map上的 containsValue()将成为第二个 Map上更有效的 containsKey()。网友评论:2
HashMap和Hashtable的区别2007-04-05 12:07HashMap是Java 1.2引进的Map接口的一个实现 Hashtable的方法是同步的,而HashMap的方法不是。这就意味着,虽然你可以不用采取任何特殊的行为就可以在一个多线程的应用程序中用一个Hashtable,但你必须同样地为一个HashMap提供外同步。一个方便的方法就是利用Collections类的静态的synchronizedMap()方法,它创建一个线程安全的Map对象,并把它作为一个封装的对象来返回。这个对象的方法可以让你同步访问潜在的HashMap。这么做的结果就是当你不需要同步时,你不能切断Hashtable中的同步(比如在一个单线程的应用程序中),而且同步增加了很多处理费用。
java中Map类有什么作用,具体怎么用呢
Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象。
Map的接口
Map---实现Map
Map.Entry--Map的内部类,描述Map中的按键/数值对。
SortedMap---扩展Map,使按键保持升序排列
使用时,一般是选择Map的子类,而不直接用Map类。
以HashMap为例。
publicstaticvoidmain(Stringargs[])
{
HashMaphashmap=newHashMap();
hashmap.put("Item0","Value0");//往map中放入key是Item0,value是Value0的一个元素
hashmap.put("Item1","Value1");//往map中放入key是Item1,value是Value1的一个元素
}
java中map什么意思和java中map<key,value>是什么意思的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!