引言:
Map的英文意思是地图,与java的集合类有何关系哪?其实地图就是一个个坐标和地址的集合,坐标就是key,具体地址就是value。
概述:
java.util中包含了许多Java常用的类,最常用的集合类是List和Map。Map提供key到value的映射,以键值对(key——value)的处理数据。
内容:
一 分类:Java自带的Map类可以分为以下三类,
1 通用Map:用于在应用程序中管理映射,通常在java.util程序包中实现
(1)HashMap:基于哈希表的Map接口实现,提供所有可选的映射操作,并允许使用null值和null键。
(2)Hashtable:实现一个哈希表,该哈希表将键映射到相应的值,任何非null对象都可以用作键或值,键对象必须实现hashcode方法和equals方法。
(3)Properties:继承于Hashtable,表示一个持久的属性集,属性列表中每个键及其对应值都是一个字符串。
(4)LinkedHashMap:作为HashMap的一个子类,保留插入的顺序,若需要输出的顺序和输入时顺序相同,可以使用LinkedHashMap来实现。
(5)IdentityHashMap:一种key值可以重复的map,判断俩个键值k1和k2相等的条件是k1==k2,与Map的(k1==null ? k2==null : e1.equals(e2))写法不同。
(6)TreeMap:不仅实现了Map接口,还实现了SortMap接口,集合中的映射关系具有一定的顺序,但是在添加、删除和定位映射关系上,比HashMap的性能差一些,不允许键对象为null。
(7)WeakHashMap:一个weak key的Map,是为某些特殊问题而设计的。它能让Map释放其所持有的对象。如果某个对象除了在Map当中充当键之外,在其他地方都没有其reference的话,那它将被当作垃圾回收。
(8)ConcurrentHashMap:使用分段锁的技术解决了HashMap的线程不安全问题和HashTable在全局锁竞争激烈的情况下效率低下的问题。高并发问题常用的工具类,可以深入研究一下。
2 专用Map:不必亲自创建此类Map,通过其他类对其进行访问,小编不多做介绍,根据特殊情况使用:java.util.jar.Attributes、javax.print.attribute.standard.PrinterStateReasons、java.security.Provider、java.awt.RenderingHints、javax.swing.UIDefaults。
3 自定义Map:用于帮助开发人员实现自己的Map的抽象类——AbstractMap,实际该类提供了Map接口的骨干实现,也就是提供了Map接口多数方法的实现,也可以在这个骨架上自行设计自己的Map接口。
二 方法
1 覆盖方法:通过覆盖如下俩个方法,以正确比较Map对象的等价性
2 更新方法:可以更改Map内容
equals(Object o) | 比较指定对象与此 Map 的等价性 |
hashCode() | 返回此 Map 的哈希码 |
clear() | 从 Map 中删除所有映射 |
remove(Object key) | 从 Map 中删除键和关联的值 |
put(Object key, Object value) | 将指定值与指定键相关联 |
clear() | 从 Map 中删除所有映射 |
putAll(Map t) | 将指定 Map 中的所有映射复制到此 map |
entrySet() | 返回 Map 中所包含映射的 Set 视图。Set 中的每个元素都是一个 Map.Entry 对象,可以使用 getKey() 和 getValue() 方法(还有一个 setValue() 方法)访问后者的键元素和值元素 |
keySet() | 返回 Map 中所包含键的 Set 视图。删除 Set 中的元素还将删除 Map 中相应的映射(键和值) |
values() | 返回 map 中所包含值的 Collection 视图。删除 Collection 中的元素还将删除 Map 中相应的映射(键和值) |
4 访问和测试方法:检索有关Map内容的信息但不更改Map内容
get(Object key) | 返回与指定键关联的值 |
containsKey(Object key) | 如果 Map 包含指定键的映射,则返回 true |
containsValue(Object value) | 如果此 Map 将一个或多个键映射到指定值,则返回 true |
isEmpty() | 如果 Map 不包含键-值映射,则返回 true |
size() | 返回 Map 中的键-值映射的数目 |
总结:
List与Map区别?
(1)用途不同:
List
存储单列数据的集合;
Map
存键和值双列数据的集合
(2)存储规则不同:List中存储的数据有序且允许重复;Map中存储的数据无序且键不能重复,键对应的值可以重复。
(3)原理:List、Set继承自Collection接口;Map不是。
List和Map相辅相成,各有特色,各位读者老爷要分清场合,合理应用。