Map接口
Map就是用来存储“键(key)-值(value) 对”的。 Map类中存储的“键值对”通过键来标识,所以“键对象”不能重复。
- 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 |
将Map转化为Set集合 |
public Set |
取出全部的key |
Map接口的entrySet()方法,调用该方法可返回一个包含映射输入的集合(Set),这些集合元素的每一个都是一个Map.Entry对象。
HashMap hm =new HaspMap();
// 填充数据
...
//返回包含映射中项的集合
Set set = hm.entrySet();
Iterator it set.iterator();
while(it.hasNext()){
Map.Entry me =(Map.Entry) it.next();
}
SortedMap接口
SortedMap接口扩展了Map,它确保了各项按升序排序。
Map.Entry接口
Map.Entry接口使得可以操作映射的输入。
实现类
HashMap
HashMap类使用散列表实现Map接口并扩展AbstractMap。
一个HashMap只允许有一个Key值为null的映射。
HashMap的构造方法:
HashMap() //构造一个默认的散列映射
HashMap(Map m) //用m的元素初始化散列映射
HashMap(int capacity) //初始化散列映射容量
HashMap(int capacity,float fillRatio) //初始化散列映射的容量和填充比
填充比:它决定在散列映射向上调整大小之前,有多少能被充满。
具体说,就是当 元素个数 > 散列映射容量*填充比 时,散列映射被扩大。
没有获得填充比,默认使用0.75。
注:散列映射并不保证它的元素的顺序。因此,元素加入散列映射的顺序不一定是它们被迭代方法读出的顺序
TreeMap
TreeMap类通过使用树实现Map接口,实现SortedMap并且扩展AbstractMap。
TreeMap提供了按排序顺序存储关键字/值对的有效手段,同时允许快速检索。
树映射保证它的元素按照关键字升序排序。
TreeMap的构造方法:
TreeMap() //构造一个空树的映射,该映射使用其关键字的自然顺序来排序
TreeMap(Comparator comp) //构造一个空的基于树的映射,该映射通过使用Comparator来排序
TreeMap(Map m) //用从m的输入初始化树映射,该映射使用其关键字的自然顺序来排序
TreeMap(SortedMap sm) //用从sm的输入来初始化一个树映射,该映射将按与sm相同的顺序来排序