Map接口 |
HashMap |
TreeMap |
Hashtable |
Map此集合的特别在于为双列集合,一个元素包含键与值两个对象,其中键有唯一性l。它提供了针对性的双列集合操作方法。如:
boolean containsKey(Object key) //是否包含键
boolean containsValue(Object value) //是否包含值
V get(Object key) //根据键获取值,如果键不存在返回null
V put(K key, V value) //添加新元素,如果键已存在,覆盖原有元素的值并且返回它。否则返回null。
V remove(Object key) //根据一个键删除其对应的元素,如果删除成功反正该元素对应的值。否则返回null。
void putAll(Map<? extends K,? extends V> m) //集合之间的Copy
Map集合一般根据键而取值,所以不支持迭代器,但提供了将集合的键或值映射到一个新的单列集合中去,然后通过单列集合的迭代器对键逐一取出。
Set<K> keySet() //将Map集合中的键映射到一个新的Set集合中
Collection<V> values() //将Map集合中的值映射到一个新的Collection集合中
Set<Map.Entry<K,V>> entrySet() //将Map集合中元素映射到嵌套类Entry的对象中,再将这个对象映射到一个新的Set集合中。
HashMap:
底层是Hash表结构,允许null存入,线程不同步,除了具有Map的集合的所有方法外并没有提供额外的扩展功能,依然使用同HashSet一样的Hash表结构
存放元素,排列顺序根据键值的Hash值排列,对比唯一性的方式如HashSet一样,区别仅在于HashMap为双列集合,多数情况下使用于需要对元素编号或元素内容过长需要名称引用的数据,其实HashSet底层使用的就是HashMap集合。
虽然HashMap支持null元素的键或值存入,但尽可能的不要这么做,因为get,put,remove等方法的依据返回值是否为null来判断方法的调用结果,如果键或值出现null的话,那么有可能在判断以上方法的返回值时出现逻辑性错误。
Entry其实就是Map集合中键与值的一个结构体。当调用entrySet方法时,每一个元素的键与值被映射到一个Entry对象中,将此对象做为一个元素交由Set集合记录,该嵌套类还提供了一组对映射关系中的键值操作的方法,如:
K getKey() //获取此Entry对象代表的Map元素中的键。
V getValue() //获取此Entry对象代表的Map元素中的值。
V setValue(V value) //修改此Entry对象代表的Map元素中的值,并返回旧值。
TreeMap:
二叉树实现底层结构,可以看作是双列的TreeSet集合,比较键的自然顺序排列元素,可以在构造时指定comparatop比较器,也可以为键类型实现comparable接口覆写compareTo方法。除了具体Map共性特点外,还包括如同TreeSet集合中的范围指定方法。 同时包括提取集合指定最大或最小键的entry结构.如:
public K firstKey() //获取第一个键
public K lastKey() //获取最后一个键
public Map.Entry<K,V> firstEntry() //获取第一个元素的entry结构
public Map.Entry<K,V> lastEntry() //获取最后一个元素的entry结构
//获取指定的键的entry结构,如果没有该键则返回序列中该键应该对应的上一个元素,如果该键上一个元素为空返回null
public Map.Entry<K,V> floorEntry(K key)
//获取指定的键序列中该键应该对应的下一个元素的entry结构,如果该键下一个元素为空返回null
public Map.Entry<K,V> higherEntry(K key)
public K floorKey(K key) //获取指定的键,如果该键不存在则返回序列中该键应该对应的上一个元素,如果该键上一个元素为空返回null
public K higherKey(K key) //获取指定的键序列中该键应该对应的下一个键的,如果该键下一个元素为空返回null
public K lowerKey(K key) //获取指定的键序列中该键应该对应的上一个键的,如果该键上一个元素为空返回null
public Map.Entry<K,V> pollFirstEntry() //删除第一个元素,并返回对应的entry结构,如果集合为空返回null
public Map.Entry<K,V> pollLastEntry() //删除最后一个元素,并返回对应的entry结构,如果集合为空返回null
Hashtable 特点与HashMap一样,只是实现了内置同步且不能存放null元素