Map接口

Map就是用来存储“键(key)-值(value) 对”的。 Map类中存储的“键值对”通过键来标识,所以“键对象”不能重复。
Map - 图1

  • TreeMap:基于红黑树实现。
  • HashMap:基于哈希表实现。
  • HashTable:和 HashMap 类似,但它是线程安全的,
    这意味着同一时刻多个线程可以同时写入 HashTable 并且不会导致数据不一致。
    它是遗留类,不应该去使用它。现在可以使用 ConcurrentHashMap 来支持线程安全,
    并且 ConcurrentHashMap 的效率会更高,因为 ConcurrentHashMap 引入了分段锁。
  • LinkedHashMap:使用双向链表来维护元素的顺序,顺序为插入顺序或者最近最少使用(LRU)顺序
方法名称 描述
public V put(K key, V value) 向集合中保存数据
public V get(Object key) 根据key找到对应的value
public Set>entrySet() 将Map转化为Set集合
public Set keySet() 取出全部的key

Map接口的entrySet()方法,调用该方法可返回一个包含映射输入的集合(Set),这些集合元素的每一个都是一个Map.Entry对象。

  1. HashMap hm =new HaspMap();
  2. // 填充数据
  3. ...
  4. //返回包含映射中项的集合
  5. Set set = hm.entrySet();
  6. Iterator it set.iterator();
  7. while(it.hasNext()){
  8. Map.Entry me =(Map.Entry) it.next();
  9. }

SortedMap接口

SortedMap接口扩展了Map,它确保了各项按升序排序。

Map.Entry接口

Map.Entry接口使得可以操作映射的输入。

实现类

HashMap

HashMap类使用散列表实现Map接口并扩展AbstractMap。
一个HashMap只允许有一个Key值为null的映射。

  1. HashMap的构造方法:
  2. HashMap() //构造一个默认的散列映射
  3. HashMap(Map m) //用m的元素初始化散列映射
  4. HashMap(int capacity) //初始化散列映射容量
  5. HashMap(int capacity,float fillRatio) //初始化散列映射的容量和填充比
  6. 填充比:它决定在散列映射向上调整大小之前,有多少能被充满。
  7. 具体说,就是当 元素个数 > 散列映射容量*填充比 时,散列映射被扩大。
  8. 没有获得填充比,默认使用0.75

注:散列映射并不保证它的元素的顺序。因此,元素加入散列映射的顺序不一定是它们被迭代方法读出的顺序

TreeMap

TreeMap类通过使用树实现Map接口,实现SortedMap并且扩展AbstractMap。

TreeMap提供了按排序顺序存储关键字/值对的有效手段,同时允许快速检索。

树映射保证它的元素按照关键字升序排序。

  1. TreeMap的构造方法:
  2. TreeMap() //构造一个空树的映射,该映射使用其关键字的自然顺序来排序
  3. TreeMap(Comparator comp) //构造一个空的基于树的映射,该映射通过使用Comparator来排序
  4. TreeMap(Map m) //用从m的输入初始化树映射,该映射使用其关键字的自然顺序来排序
  5. TreeMap(SortedMap sm) //用从sm的输入来初始化一个树映射,该映射将按与sm相同的顺序来排序