Java中Map的用法详解

Java中Map的用法详解
Java中Map的用法详解

Java中Map的用法详解

Map简介

将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

此接口取代Dictionary 类,后者完全是一个抽象类,而不是一个接口。

Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。映射顺序定义为迭代器在映射的collection 视图上返回其元素的顺序。某些映射实现可明确保证其顺序,如TreeMap类;另一些映射实现则不保证顺序,如HashMap类。

注:将可变对象用作映射键时必须格外小心。当对象是映射中某个键时,如果以影响equals 比较的方式更改了对象的值,则映射的行为将是不确定的。此项禁止的一种特殊情况是不允许某个映射将自身作为一个键包含。虽然允许某个映射将自身作为值包含,但请格外小心:在这样的映射上equals 和hashCode方法的定义将不再是明确的。

所有通用的映射实现类应该提供两个“标准的”构造方法:一个void (无参数)构造

方法,用于创建空映射;一个是带有单个Map 类型参数的构造方法,用于创建一个与其

参数具有相同键-值映射关系的新映射。实际上,后一个构造方法允许用户复制任意映射,生成所需类的一个等价映射。尽管无法强制执行此建议(因为接口不能包含构造方法),但是JDK 中所有通用的映射实现都遵从它。

此接口中包含的“破坏”方法可修改其操作的映射,如果此映射不支持该操作,这些方

法将抛出UnsupportedOperationException。如果是这样,那么在调用对映射无效时,这些方法可以(但不要求)抛出UnsupportedOperationException。例如,如果某个不可修改的映射(其映射关系是“重叠”的)为空,则对该映射调用putAll(Map) 方法时,可以(但不要求)抛出异常。

某些映射实现对可能包含的键和值有所限制。例如,某些实现禁止null 键和值,另

一些则对其键的类型有限制。尝试插入不合格的键或值将抛出一个未经检查的异常,通常是NullPointerException或ClassCastException。试图查询是否存在不合格的键或值可能抛出异常,或者返回false;某些实现将表现出前一种行为,而另一些则表现后一种。一般来说,试图对不合格的键或值执行操作且该操作的完成不会导致不合格的元素被插入映射中时,将可能抛出一个异常,也可能操作成功,这取决于实现本身。这样的异常在此接口的规范中标记为“可选”。

此接口是Java Collections Framework 的成员。

Collections Framework 接口中的很多方法是根据equals 方法定义的。例如,containsKey(Object key) 方法的规范中写道:“当且仅当此映射包含针对满足

(key==null ? k==null : key.equals(k)) 的键k 的映射关系时,返回true”。不应将此规范解释为:调用具有非空参数key 的Map.containsKey将导致对任意的键k 调用key.equals(k)。实现可随意进行优化,以避免调用equals,例如,可首先比较两个键的哈希码(Object.hashCode() 规范保证哈希码不相等的两个对象不会相等)。一般来说,只要实现者认为合适,各种Collections Framework 接口的实现可随意利用底层Object 方法的指定行为。

常用操作说明

void clear()

从此映射中移除所有映射关系(可选操作)。

booleancontainsKey(Object key)

如果此映射包含指定键的映射关系,则返回true。

booleancontainsValue(Object value)

如果此映射将一个或多个键映射到指定值,则返回true。

Set>entrySet()

返回此映射中包含的映射关系的Set 视图。

boolean equals(Object o)

比较指定的对象与此映射是否相等。

V get(Object key)

返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回null。inthashCode()

返回此映射的哈希码值。

booleanisEmpty()

如果此映射未包含键-值映射关系,则返回true。

SetkeySet()

返回此映射中包含的键的Set 视图。

V put(K key, V value)

将指定的值与此映射中的指定键关联(可选操作)。

voidputAll(Map m)

从指定映射中将所有映射关系复制到此映射中(可选操作)。

V remove(Object key)

如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。

int size()

返回此映射中的键-值映射关系数。

Collectionvalues()

返回此映射中包含的值的Collection 视图。

Map的一般用法

1.声明一个Map :

Map map = new HashMap();

2 .向map中放值,注意:map是key-value的形式存放的,如:map.put("sa","dd");

3 .从map中取值:

String str = map.get("sa").toString,

结果是:str = "dd'

4 .遍历一个map,从中取得key和value :

Map m= new HashMap();

for(Object obj : map.keySet()){

Object value = map.get(obj );

}

java中Map类

java中Map类 Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象。 Map的接口 Map---实现Map Map.Entry--Map的内部类,描述Map中的按键/数值对。 SortedMap---扩展Map,使按键保持升序排列 关于怎么使用,一般是选择Map的子类,而不直接用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。 如果用过它,就会知道它的用处了。 又比如: Map map = new HashMap(); map.put("Order", (Order) obj); 资料: Collection容器中包含Set和List接口,Set中又包含HashSet,List中包含LinkedList和ArrayList;单独的Map接口中只有HashMap。 java.util 中的集合类包含Java 中某些最常用的类。最常用的集合类是List 和Map。List 的具体实现包括ArrayList 和Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。List 适用于按数值索引访问元素的情形,其中的数据有顺序且可以重复。而Set中数据无顺序且不可以重复。

集合里Map,Set,List的区别

Java中的Set,List,Map的区别 (转) 对JAVA的集合的理解是相对于数组 相对于数组的是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型) JAVA集合可以存储和操作数目不固定的一组数据。 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用类型的的数据,不能存放基本数据类型. JAVA集合主要分为三种类型: Set(集) List(列表) Map(映射) Collection 接口 Collection是最基本的集合接口,声明了适用于JAVA集合(只包括Set和List)的通用方法。 Set 和List 都继承了Conllection,Map没有 Collection接口的方法: boolean add(Object o) :向集合中加入一个对象的引用 void clear() :删除集合中所有的对象,即不再持有这些对象的引用 boolean isEmpty() :判断集合是否为空 boolean contains(Object o): 判断集合中是否持有特定对象的引用 Iterartor iterator() : 返回一个Iterator对象,可以用来遍历集合中的元素 boolean remove(Object o):从集合中删除一个对象的引用 int size() :返回集合中元素的数目 Object[] toArray() :返回一个数组,该数组中包括集合中的所有元素 关于:Iterator() 和toArray() 方法都用于集合的所有的元素,前者返回一个Iterator对象,后者返回一个包含集合中所有元素的数组。 Iterator接口声明了如下方法: hasNext(): 判断集合中元素是否遍历完毕,如果没有,就返回true next() :返回下一个元素 remove():从集合中删除上一个有next()方法返回的元素。 Set(集合): Set是最简单的一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。 Set接口主要实现了两个实现类: HashSet : HashSet类按照哈希算法来存取集合中的对象,存取速度比较快

java_Set,List,Map,Vector,ArrayList的区别

JAVA的容器---List,Map,Set Collection ├List │├LinkedList │├ArrayList │└Vector │└Stack └Set Map ├Hashtable ├HashMap └WeakHashMap Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。 所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。 如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下: Iterator it = collection.iterator(); // 获得一个迭代子 while(it.hasNext()) { Object obj = it.next(); // 得到下一个元素 } 由Collection接口派生的两个接口是List和Set。

java中List的用法

java中List的用法和实例详解 List的用法 List包括List接口以及List接口的所有实现类。因为List接口实现了Collection接口,所以List接口拥有Collection接口提供的所有常用方法,又因为List是列表类型,所以List接口还提供了一些适合于自身的常用方法,如表1所示。 表1 List接口定义的常用方法及功能 从表1可以看出,List接口提供的适合于自身的常用方法均与索引有关,这是因为List集合为列表类型,以线性方式存储对象,可以通过对象的索引操作对象。 List接口的常用实现类有ArrayList和LinkedList,在使用List集合时,通常情况下声明为List类型,实例化时根据实际情况的需要,实例化为ArrayList或LinkedList,例如: List l = new ArrayList();// 利用ArrayList类实例化List集合 List l2 = new LinkedList();// 利用LinkedList类实例化List集合 1.add(int index, Object obj)方法和set(int index, Object obj)方法的区别 在使用List集合时需要注意区分add(int index, Object obj)方法和 set(int index, Object obj)方法,前者是向指定索引位置添加对象,而后者是修改指定索引位置的对象,例如执行下面的代码: src\com\mwq\TestCollection.java关键代码: public static void main(String[] args) { String a = "A", b = "B", c = "C", d = "D", e = "E"; List list = new LinkedList(); list.add(a);

Java Map集合

java.util 中的集合类包含Java 中某些最常用的类。最常用的集合类是List 和Map。List 的具体实现包括ArrayList 和V ector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。List 适用于按数值索引访问元素的情形。 Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。从概念上而言,您可以将List 看作是具有数值键的Map。而实际上,除了List 和Map 都在定义java.util 中外,两者并没有直接的联系。本文将着重介绍核心Java 发行套件中附带的Map,同时还将介绍如何采用或实现更适用于您应用程序特定数据的专用Map。 了解Map 接口和方法 Java 核心类中有很多预定义的Map 类。在介绍具体实现之前,我们先介绍一下Map 接口本身,以便了解所有实现的共同点。Map 接口定义了四种类型的方法,每个Map 都包含这些方法。下面,我们从两个普通的方法(表1)开始对这些方法加以介绍。 表1:覆盖的方法。我们将这Object 的这两个方法覆盖,以正确比较Map 对象的等价性。 Map 构建 Map 定义了几个用于插入和删除元素的变换方法(表2)。 表2:Map 更新方法:可以更改Map 内容。 尽管您可能注意到,纵然假设忽略构建一个需要传递给putAll() 的Map 的开销,使用putAll() 通常也并不比使用大量的put() 调用更有效率,但putAll() 的存在一点也不稀奇。这是因为,putAll() 除了迭代put() 所执行的将每个键值对添加到Map 的算法以外,还需要迭代所传递的Map 的元素。但应注意,putAll() 在添加所有元素之前可以正确调整Map 的大小,因此如果您未亲自调整Map 的大小(我们将对此进行简单介绍),则putAll() 可能比预期的更有效。 查看Map 迭代Map 中的元素不存在直接了当的方法。如果要查询某个Map 以了解其哪些元素满足特定查询,或如果要迭代其所有元素(无论原因如何),则您首先需要获取该Map 的“视图”。有三种可能的视图(参见表3) 所有键值对—参见entrySet() 所有键—参见keySet() 所有值—参见values() 前两个视图均返回Set 对象,第三个视图返回Collection 对象。就这两种情况而言,问题到这里并没有结束,这是因为您无法直接迭代Collection 对象或Set 对象。要进行迭代,

java中HashMap详解

java中HashMap详解 HashMap 和HashSet 是Java Collection Framework 的两个重要成员,其中HashMap 是Map 接口的常用实现类,HashSet 是Set 接口的常用实现类。虽然HashMap 和HashSet 实现的接口规范不同,但它们底层的Hash 存储机制完全一样,甚至HashSet 本身就采用HashMap 来实现的。 通过HashMap、HashSet 的源代码分析其Hash 存储机制 实际上,HashSet 和HashMap 之间有很多相似之处,对于HashSet 而言,系统采用Hash 算法决定集合元素的存储位置,这样可以保证能快速存、取集合元素;对于HashMap 而言,系统key-value 当成一个整体进行处理,系统总是根据Hash 算法来计算key-value 的存储位置,这样可以保证能快速存、取Map 的key-value 对。 在介绍集合存储之前需要指出一点:虽然集合号称存储的是Java 对象,但实际上并不会真正将Java 对象放入Set 集合中,只是在Set 集合中保留这些对象的引用而言。也就是说:Java 集合实际上是多个引用变量所组成的集合,这些引用变量指向实际的Java 对象。 集合和引用 就像引用类型的数组一样,当我们把Java 对象放入数组之时,并不是真正的把Java 对象放入数组中,只是把对象的引用放入数组中,每个数组元素都是一个引用变量。

HashMap 的存储实现 当程序试图将多个key-value 放入HashMap 中时,以如下代码片段为例: Java代码 1. HashMap map = new HashMap(); 2. map.put("语文" , 80.0); 3. map.put("数学" , 89.0); 4. map.put("英语" , 78.2); HashMap 采用一种所谓的“Hash 算法”来决定每个元素的存储位置。 当程序执行map.put("语文" , 80.0); 时,系统将调用"语文"的hashCode() 方法得到其hashCode 值——每个Java 对象都有hashCode() 方法,都可通过该方法获得它的hashCode 值。得到这个对象的hashCode 值之后,系统会根据该hashCode 值来决定该元素的存储位置。 我们可以看HashMap 类的put(K key , V value) 方法的源代码: Java代码 public V put(K key, V value) { // 如果key 为null,调用putForNullKey 方法进行处理

Java中集合类用法总结

帮助 | 留言交? | 登录 首页我的图书馆主题阅读精彩目录精品文苑Tags 会员浏览好书推荐 以文找文 如何对文章标记,添加批注? Java 中集合?用法总结(转载) wade0564 收录于2010-07-08 阅读数:查看 收藏数:7 公众公开 原文来源 tags : java 集合类 欢迎浏览 wade0564 个人图书馆中收藏的文章,想收藏这篇好文章吗,赶快 吧,1分钟拥有自己的个人图书馆! 我也要收藏 举报 Java 中集合?用法总结 收藏 Collection ├List │├LinkedList │├ArrayList (异步,线程不安全,空间用完时自动增长原容量一半)│└Vector (同 步,线程安全,空间用完时自动增长原容量一倍)│ └Stack └Set ├HashSet └TreeSet Map ├Hashtable ├HashMap ├WeakHashMap └TreeMap Map 接口: | + -- WeakHashMap: 以弱键 实现的基于哈希表的 Map 。在 WeakHashMap 中,当某个键不再正常使用时,将自动移除其条 | 目。更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为 可终止的,被终 | 止,然后被回收。丢弃某个键时, 其条目从映射中有效地移除,因此,该类的行为与其他的 Map 实现有所不同。此实现 | 不是同步的。 | + -- TreeMap:该映射根据其键的自然顺序进行 排序,或?根据创建映射时提供的 Comparator 进行 排序,具体取决于使用的 | 构造方法。此实现不是同步的。 | + -- HashMap:基于哈希表的 Map 接?的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了 | 非同步和允许 使用 null 之外,HashMap 类与 Hashtable ?致相同。)此类不保证映射的顺序,特别是它不保证该顺 | 序恒久不变。此实现不是同步的。 | +-- SortedMap: 进一步提供关于键的总体排序 的 Map 。该映射是根据其键的自然顺序进 行排序的,或?根据通常在创建有 序映射时提供的 Comparator 进行排序。对有序映射的 collection 视图(由 entrySet 、keySet 和 values 方法返回 )进行迭代时,此顺序就会反映 出来。要采用此排序方式,还需要提供一些其他操作(此接?是 SortedSet 的对应映 射)。 Collection 接口: | 热点推荐 中国经典汤品——广东汤常用多音字汇总 如果你失恋。。。这些话...影响世界的100个管理定律汽车发动机?作过程和原理分析温家宝总理答中外记?问女人味,有多少男人可以读懂?珍稀的白头叶猴(组图)三鹿门事件之——中国,...国家公务员职务与级别当代古筝四美 付娜《渔...生活?秘方 真的很实用...哲理?品:守护梦想聚会时可以玩的?游戏依赖型人格障碍的表现和治疗经典妙语,十分精彩江边施救[贴图]李一男2003年在港湾...电脑速度慢的解决方法 ...重装系统后必须做的10件?事

java中map集合的用法

1.声明一个map: Map map = new HashMap(); 2.向map中放值,注意:map是key-value的形式存放的.如: map.put("sa","dd"); 3.从map中取值:String str = map.get("sa").toString();结果是:str = "dd"; 4.遍历一个map,从中取得key 和value JDK1.5 Map m = new HashMap(); for (Object o : map.keySet()) { map.get(o); } JDK1.4 Map map = new HashMap() ; Iterator it = map.entrySet().iterator() ; while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next() ; Object key = entry.getKey() ; Object value = entry.getValue() ; } 了解最常用的集合类型之一Map 的基础知识以及如何针对您应用程序特有的数据优化Map。 本文相关下载: ·Jack 的HashMap 测试 ·Oracle JDeveloper 10g java.util 中的集合类包含Java 中某些最常用的类。最常用的集合类是List 和Map。List 的具体实现包括ArrayList 和Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象元素列表。List 适用于按数值索引访问元素的情形。 Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。从概念上而言,您可以将List 看作是具有数值键的Map。而实际上,除了List 和Map 都在定义java.util 中

map集合遍历的五种方法

package nc.util.TestClientTools; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; /** * map集合遍历的五种方法 * @FileName: CircleMap.java * @ClassName: nc.util.TestClientTools.CircleMap * @Description: TODO(这里用一句话描述这个类的作用) * @author chenfang * @email ichenfang163@https://www.360docs.net/doc/5113735801.html, * @date 2017-12-11 下午3:54:24 * @version V1.0 * */ //循环遍历map的五种方法 publicclass CircleMap { publicstaticvoid main(String[] args) { Map tempMap = new HashMap(); tempMap.put("a", 1); tempMap.put("b", 2); tempMap.put("c", 3); // JDK1.4中 // 遍历方法一hashmap entrySet() 遍历 System.out.println("方法一"); Iterator it = tempMap.entrySet().iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); Object key = entry.getKey(); Object value = entry.getValue(); System.out.println("key=" + key + " value=" + value); } System.out.println(""); // JDK1.5中,应用新特性For-Each循环 // 遍历方法二 System.out.println("方法二"); for (Map.Entry entry : tempMap.entrySet()) { String key = entry.getKey().toString(); String value = entry.getValue().toString(); System.out.println("key=" + key + " value=" + value);

java Map及MapEntry详解

Map是java中的接口,Map.Entry是Map的一个内部接口。 Map提供了一些常用方法,如keySet()、entrySet()等方法。 keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。 Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry。它表示Map中的一个实体(一个key-value对)。接口中有getKey(),getValue方法。 由以上可以得出,遍历Map的常用方法: 1. Map map = new HashMap(); Irerator iterator = map.entrySet().iterator(); while(iterator.hasNext()) { Map.Entry entry = iterator.next(); Object key = entry.getKey(); // } 2.Map map = new HashMap(); Set keySet= map.keySet(); Irerator iterator = keySet.iterator; while(iterator.hasNext()) { Object key = iterator.next(); Object value = map.get(key); // } 另外,还有一种遍历方法是,单纯的遍历value值,Map有一个values方法,返回的是value的Collection集合。通过遍历collection也可以遍历value,如 Map map = new HashMap(); Collection c = map.values(); Iterator iterator = c.iterator(); while(iterator.hasNext()) { Object value = iterator.next();

Java集合框架之Map详解

Java集合框架之Map详解 Map(映射)是一个接口,是一个键值对来进行存储的。一对一对往里内存,而且要保证键的唯一性。 Map |--Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0效率低 |--HashMap:底层是哈希表数据结构,允许使用null值和null键,该集合是不同步的。 jdk1.2效率高 |--TreeMap:底层是而查实数据结构。线程不同步。可以用于给Map集合中的键进行排序,和Set很像,其实,Set底层就是使用了Map集合。 Map HashMap是最常用的一个类,那么HashMap的最常用的方法有哪些呢? a)放置:public V put(K key, V value):在此映射中关联指定值与指定键 b)获取:public V get(Object key):返回指定键所映射的值键的集合:public Set keySet():Map的keySet()方法会返回key的集合,因为Map 的键是不能重复的,因此ksySet()方法的返回类型是set。 c)值的集合:public Collection values():Map的值是可以重复的。因此value()方法的返回类型是Collection,可以容纳重复的元素. 我们来看看以下,这些常用方法的使用: import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Set; public class HashMapTest { public static void main(String[] args) { HashMap map=new HashMap(); map.put("name1", "zhangsan"); map.put("name2", "lisi"); map.put("name3", "wangwu"); map.put("name1", "zhaoliu"); System.out.println(map); System.out.println("--------------------"); String value1=(String) map.get("name2"); System.out.println(value1);

Java中Map的用法详解

Java中Map的用法详解 Map简介 将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。 此接口取代Dictionary 类,后者完全是一个抽象类,而不是一个接口。 Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。映射顺序定义为迭代器在映射的collection 视图上返回其元素的顺序。某些映射实现可明确保证其顺序,如TreeMap类;另一些映射实现则不保证顺序,如HashMap类。 注:将可变对象用作映射键时必须格外小心。当对象是映射中某个键时,如果以影响equals 比较的方式更改了对象的值,则映射的行为将是不确定的。此项禁止的一种特殊情况是不允许某个映射将自身作为一个键包含。虽然允许某个映射将自身作为值包含,但请格外小心:在这样的映射上equals 和hashCode方法的定义将不再是明确的。 所有通用的映射实现类应该提供两个“标准的”构造方法:一个void (无参数)构造 方法,用于创建空映射;一个是带有单个Map 类型参数的构造方法,用于创建一个与其 参数具有相同键-值映射关系的新映射。实际上,后一个构造方法允许用户复制任意映射,生成所需类的一个等价映射。尽管无法强制执行此建议(因为接口不能包含构造方法),但是JDK 中所有通用的映射实现都遵从它。 此接口中包含的“破坏”方法可修改其操作的映射,如果此映射不支持该操作,这些方 法将抛出UnsupportedOperationException。如果是这样,那么在调用对映射无效时,这些方法可以(但不要求)抛出UnsupportedOperationException。例如,如果某个不可修改的映射(其映射关系是“重叠”的)为空,则对该映射调用putAll(Map) 方法时,可以(但不要求)抛出异常。 某些映射实现对可能包含的键和值有所限制。例如,某些实现禁止null 键和值,另 一些则对其键的类型有限制。尝试插入不合格的键或值将抛出一个未经检查的异常,通常是NullPointerException或ClassCastException。试图查询是否存在不合格的键或值可能抛出异常,或者返回false;某些实现将表现出前一种行为,而另一些则表现后一种。一般来说,试图对不合格的键或值执行操作且该操作的完成不会导致不合格的元素被插入映射中时,将可能抛出一个异常,也可能操作成功,这取决于实现本身。这样的异常在此接口的规范中标记为“可选”。 此接口是Java Collections Framework 的成员。 Collections Framework 接口中的很多方法是根据equals 方法定义的。例如,containsKey(Object key) 方法的规范中写道:“当且仅当此映射包含针对满足 (key==null ? k==null : key.equals(k)) 的键k 的映射关系时,返回true”。不应将此规范解释为:调用具有非空参数key 的Map.containsKey将导致对任意的键k 调用key.equals(k)。实现可随意进行优化,以避免调用equals,例如,可首先比较两个键的哈希码(Object.hashCode() 规范保证哈希码不相等的两个对象不会相等)。一般来说,只要实现者认为合适,各种Collections Framework 接口的实现可随意利用底层Object 方法的指定行为。 常用操作说明 void clear() 从此映射中移除所有映射关系(可选操作)。 booleancontainsKey(Object key) 如果此映射包含指定键的映射关系,则返回true。

JAVA中的集合类讲课讲稿

J A V A中的集合类

为什么要使用集合类 当你事先不知道要存放数据的个数,或者你需要一种比数组下标存取机制更灵活的方法时,你就需要用到集合类。 理解集合类 集合类存放于java.util包中。 集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference)。 集合类型主要有3种:set(集)、list(列表)和map(映射)。 (1)集 集(set)是最简单的一种集合,它的对象不按特定方式排序,只是简单的把对象加入集合中,就像往口袋里放东西。 对集中成员的访问和操作是通过集中对象的引用进行的,所以集中不能有重复对象。 集也有多种变体,可以实现排序等功能,如TreeSet,它把对象添加到集中的操作将变为按照某种比较规则将其插入到有序的对象序列中。它实现的是SortedSet接口,也就是加入了对象比较的方法。通过对集中的对象迭代,我们可以得到一个升序的对象集合。 (2)列表 列表的主要特征是其对象以线性方式存储,没有特定顺序,只有一个开头和一个结尾,当然,它与根本没有顺序的集是不同的。 列表在数据结构中分别表现为:数组和向量、链表、堆栈、队列。

关于实现列表的集合类,是我们日常工作中经常用到的,将在后边的笔记详细介绍。 (3)映射 映射与集或列表有明显区别,映射中每个项都是成对的。映射中存储的每个对象都有一个相关的关键字(Key)对象,关键字决定了对象在映射中的存储位置,检索对象时必须提供相应的关键字,就像在字典中查单词一样。关键字应该是唯一的。 关键字本身并不能决定对象的存储位置,它需要对过一种散列(hashing)技术来处理,产生一个被称作散列码(hash code)的整数值,散列码通常用作一个偏置量,该偏置量是相对于分配给映射的内存区域起始位置的,由此确定关键字/对象对的存储位置。理想情况下,散列处理应该产生给定范围内均匀分布的值,而且每个关键字应得到不同的散列码。 集合类简介 java.util中共有13个类可用于管理集合对象,它们支持集、列表或映射等集合,以下是这些类的简单介绍 集: HashSet:使用HashMap的一个集的实现。虽然集定义成无序,但必须存在某种方法能相当高效地找到一个对象。使用一个HashMap 对象实现集的存储和检索操作是在固定时间内实现的.

Java集合Collection、List、Set、Map使用详解

Java集合排序及java集合类详解(Collection, List, Set, Map) 摘要内容 集合是Java里面最常用的,也是最重要的一部分。能够用好集合和理解好集合对于做Java程序的开发拥有无比的好处。本文详细解释了关于Java中的集合是如何实现的,以及他们的实现原理。 目录 1 集合框架 (1) 1.1 集合框架概述 (2) 1.1.1 容器简介 (2) 1.1.2 容器的分类 (4) 1.2 Collection (6) 1.2.1 常用方法 (6) 1.2.2 迭代器 (8) 1.3 List (10) 1.3.1 概述 (10) 1.3.2 常用方法 (11) 1.3.3 实现原理 (15) 1.4 Map (18) 1.4.1 概述 (18) 1.4.2 常用方法 (18) 1.4.3 Comparable 接口 (23) 1.4.4 实现原理 (24) 1.4.5 覆写hashCode() (29) 1.5 Set (33) 1.5.1 概述 (33) 1.5.2 常用方法 (33) 1.5.3 实现原理 (38) 1.6 总结:集合框架中常用类比较 (39) 2 练习 (40) 3 附录:排序 (41) 1集合框架

1.1集合框架概述 1.1.1容器简介 到目前为止,我们已经学习了如何创建多个不同的对象,定义了这些对象以后,我们就可以利用它们来做一些有意义的事情。 举例来说,假设要存储许多雇员,不同的雇员的区别仅在于雇员的身份证号。我们可以通过身份证号来顺序存储每个雇员,但是在内存中实现呢?是不是要准备足够的内存来存储1000个雇员,然后再将这些雇员逐一插入?如果已经插入了500条记录,这时需要插入一个身份证号较低的新雇员,该怎么办呢?是在内存中将500条记录全部下移后,再从开头插入新的记录? 还是创建一个映射来记住每个对象的位置? 当决定如何存储对象的集合时,必须考虑如下问题。 对于对象集合,必须执行的操作主要以下三种: ◆添加新的对象 ◆删除对象 ◆查找对象 我们必须确定如何将新的对象添加到集合中。可以将对象添加到集合的末尾、开头或者中间的某个逻辑位置。 从集合中删除一个对象后,对象集合中现有对象会有什么影响呢?可能必须将内存移来移去,或者就在现有对象所驻留的内存位置下一个“洞”。 在内存中建立对象集合后,必须确定如何定位特定对象。可建立一种机制,利用该机制可根据某些搜索条件(例如身份证号)直接定位到目标对象;否则,便需要遍历集合中的每个对象,直到找到要查找的对象为止。 前面大家已经学习过了数组。数组的作用是可以存取一组数据。但是它却存在一些缺点,使得无法使用它来比较方便快捷的完成上述应用场景的要求。 1.首先,在很多数情况下面,我们需要能够存储一组数据的容 器,这一点虽然数组可以实现,但是如果我们需要存储的数据 的个数多少并不确定。比如说:我们需要在容器里面存储某个

JAVA集合之Map映射深刻总结案例附上解释跟总结

Java集合系列之Map映射学习总结一.HashMap实例 案例1:HashMapDemo1 package Map映射; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; /** * 顺序结构 * 基于哈希表的Map 接口的实现。 * 键和值都允许是null,值可以重复。 * 无序的 * 线程不安全的。(不同步) * 遍历无序输出. * 和Set集一样,没有for循环遍历的方法。 * 遍历Map方法有两种: * ①调用keySet方法: * Set keys = map.keySet(); * Iterator it = keys.iterator(); * ②调用entrySet方法: * Set keys = map.entrySet(); * Iterator it = keys.iterator(); * 本例子遍历的是基本类型 * */ public class HashMapDemo1 { public static void main(String[] args) { HashMap map = new HashMap(); map.put(1, 111); map.put("1", "上海"); map.put(5, "广州"); map.put(3, "西安"); map.put(null,"武汉"); //键允许是null map.put(2, null);//值允许是null map.put(null,null);//键和值都允许是null,会替换前面的null:武汉. System.out.println("**********迭代器遍历调用keySet方法*********"); Set keys = map.keySet();//获取所有的键,放入一个集合中 Iterator it = keys.iterator();//取得迭代器才可以遍历 //遍历出来的结果是无序的。

hashmap的用法

HashMap的用法 - 对HashMap不是很熟悉。特整理一些记录。 HashMap类实现了Map接口,由HashMap类实现的Map集合,允许以null作为键对象,但是因为键对象不可以重复,重复之后就覆盖,在HashMap中的对象是无序的。HashMap的映射关系 就像表中的字段跟值一样,可以把表的查询结果完全转换成HashMap散列表。Object put(K key,V value) 向集合中添加指定值与指定键映射关系。 putAll(Map m) 将指定映射M的所有映射关系复制到此映射中,这些映射关系将替换此映射目前针对指定映射中所有键的所有映射关系。 Object get(Object K) 返回指定键在此标识哈希映射中所映射的值,如果存在指定的键对象则返回与该键对应的值对象;否则返null。 void clear() 移除集合中所有的映射关系。 int size() 返回集合中的键-值映射关系个数。 int hashCode() 返回调用映射的散列码。 Object clone() 返回此 HashMap 实例的浅表复制:并不克隆键和值本身。 boolean equals(Object obj) 如果obj是一个map并包含相同的映射,则返回true. boolean containsKey(Object K) 如果映射中包含了作为键的K,则返回true。 boolean containsValue(Object value) 如果映射中包含了作为值的V,则返回true。 Set > entrySet() 返回此映射所包含的映射关系的 collection视图。 boolean isEmpty() 如果此映射不包含键-值映射关系,也就是说映射是空的,则返回true。 Set keySet() 返回此映射中所包含的键的set视图。 remove(Object K) 删除关键字等于K的映射关系。

java中Map List与Set的区别

java中Map,List与Set的区别 Set,List,Map的区别 java集合的主要分为三种类型: Set(集) List(列表) Map(映射) 要深入理解集合首先要了解下我们熟悉的数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),而JAVA 集合可以存储和操作数目不固定的一组数据。所有的JAVA集合都位于java.util包中!JAVA 集合只能存放引用类型的的数据,不能存放基本数据类型。 简单说下集合和数组的区别:(参考文章:《Thinking In Algorithm》03.数据结构之数组) [html] view plain copy print?在CODE上查看代码片派生到我的代码片 世间上本来没有集合,(只有数组参考C语言)但有人想要,所以有了集合 有人想有可以自动扩展的数组,所以有了List 有的人想有没有重复的数组,所以有了set 有人想有自动排序的组数,所以有了TreeSet,TreeList,Tree** 而几乎有有的集合都是基于数组来实现的. 因为集合是对数组做的封装,所以,数组永远比任何一个集合要快 但任何一个集合,比数组提供的功能要多 一:数组声明了它容纳的元素的类型,而集合不声明。这是由于集合以object形式来存储它们的元素。 二:一个数组实例具有固定的大小,不能伸缩。集合则可根据需要动态改变大小。 三:数组是一种可读/可写数据结构---没有办法创建一个只读数组。然而可以使用集合提供的ReadOnly方法,以只读方式来使用集合。该方法将返回一个集合的只读版本。 Java所有“存储及随机访问一连串对象”的做法,array是最有效率的一种。 1、 效率高,但容量固定且无法动态改变。 array还有一个缺点是,无法判断其中实际存有多少元素,length只是告诉我们array的容量。 2、Java中有一个Arrays类,专门用来操作array。 arrays中拥有一组static函数, equals():比较两个array是否相等。array拥有相同元素个数,且所有对应元素两两相等。fill():将值填入array中。 sort():用来对array进行排序。 binarySearch():在排好序的array中寻找元素。

Java集合Map遍历(三种方式)

package decorator; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import org.junit.Before; import org.junit.Test; /** * 对于Map的三种方式遍历1.keySet() 2.values() 3.entrySet() * 三种方式得到Set之后,都可以使用foreach或者iterator,不能使用for,因为数据结构决定的 * *@author Administrator * */ public class MapCycle { Mapmap; // 准备好数据 @Before public void testData() { map=new HashMap<>(); map.put(1,"王德海"); map.put(2,"李正成");

map.put(3,"张青"); map.put(4,"王亮"); map.put(5,"刘康"); } /** 测试三种方式,这三种方式最后都是遍历Set,于是都可以使用foreach或者Iterator **/ // 方式1:keySet()方法获取到Set(key) @Test public void testFirst() { Set set =map.keySet(); for(Integer integer : set) { System.out.println(map.get(integer)); } } // 方式2:values()方法获取到Collection(value) @Test public void testSecond() { Collection collection =map.values(); for(String string : collection) { System.out.println(string); } } // 方式3:entrySet()方法获取到Set> @Test

相关文档
最新文档