图Map接口:存储一组对象,每个对象都有一个关联的键。
提供对一个值的集合与一个键的规则集进行查询、更新和读取方法。
用于关键字/数值对,较高的存取性能。不允许重复的key,但允许重复的Value。
处理Map的三种集合:关键字集KeySet() 数值集value()
Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。
Hashtable:
Hashtable继承Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value。
添加数据使用put(key,value),取出数据使用get(key),这两个基本操作的时间开销为常数。
Hashtable通过initialcapacity和loadfactor两个参数调整性能。通常缺省的loadfactor0.75较好地实现了时间和空间的均衡。增大loadfactor可以节省空间但相应的查找时间将增大,这会影响像get和put这样的操作。
HashMap:
没有顺序、效率高。散列表的通用映射表,无序,可在初始化时设定其大小,自动增长。
HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即nullvalue和nullkey。,但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap的容量成比例。因此,如果迭代操作的性能相当重要的话,不要将HashMap的初始化容量设得过高,或者loadfactor过低。
LinkedHashMap:
可按插入图的顺序或者按最后一次访问时间的顺序排序。扩展HashMap,对返回集合迭代时,维护插入顺序。
TreeMap:
基于平衡树的映射表。按照键排好的顺序遍历图。键可以使用Comparable接口或Comparator接口来排序。
WeakHashMap:
基于弱引用散列表的映射表,如果不保持映射表外的关键字的引用,则内存回收程序会回收它。
HashMap和Hashtable:
(1).历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现
(2).同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的
(3).值:只有HashMap可以让你将空值作为一个表的条目的key或value