LinkedHashMap
|
| —- | —- |
| | |
| | 继承自HashMap, 底层额外维护了一个双向链表来维持数据有序. 可以通过设置accessOrder来实现FIFO(插入有序)或者LRU(访问有序)缓存. |
| Map map = new HashMap();
map.put(“Rajib Sarma”,”100”);
map.put(“Rajib Sarma”,”200”);//The value “100” is replaced by “200”.
map.put(“Sazid Ahmed”,”200”); | |
2. hashtable
4种构造方法 | |
---|---|
put(): key重复value覆盖 | |
put(): key不重复,key-value添加 | |
(1)table是一个Entry[]数组类型,而Entry实际上就是一个单向链表。哈希表的”key-value键值对”都是存储在Entry数组中的。 (2)count是Hashtable的大小,它是Hashtable保存的键值对的数量。 (3)threshold是Hashtable的阈值,用于判断是否需要调整Hashtable的容量。threshold的值=”容量*加载因子”。 (4)loadFactor就是加载因子。 (5)modCount是用来实现fail-fast机制的 |
3. 比较
4. hashmap和hashset
HashMap | HashSet |
---|---|
实现了Map接口 | 实现Set接口 |
存储键值对 | 仅存储对象 |
调用put()向map中添加元素 | 调用add()方法向Set中添加元素 |
HashMap使用键(Key)计算Hashcode | HashSet使用成员对象来计算hashcode值, 对于两个对象来说hashcode可能相同, 所以equals()方法用来判断对象的相等性, 如果两个对象不同的话,那么返回false |
HashMap相对于HashSet较快,因为它是使用唯一的键获取对象 | HashSet较HashMap来说比较慢 |
public class RunoobTest { public static void main(String[] args) { // 创建 HashMap 对象 Sites HashMap // 添加键值对 Sites.put(“one”, “Google”); Sites.put(“two”, “Runoob”); Sites.put(“three”, “Taobao”); Sites.put(“four”, “Zhihu”); System.out.println(Sites); } } |
public class RunoobTest { public static void main(String[] args) { HashSet sites.add(“Google”); sites.add(“Runoob”); sites.add(“Taobao”); sites.add(“Zhihu”); sites.add(“Runoob”); // 重复的元素不会被添加 sites.remove(“Taobao”); // 删除元素,删除成功返回 true,否则为 false System.out.println(sites); } } |
5. hashMap hashtable hashSet
hashMap | hashtable | hashSet | |
---|---|---|---|
元素类型 | entry | entry | object |
null | 一个key为null, value无要求 | key-value都不为null | 无要求 |
重复元素 | key可以重复,value不覆盖 | key可以重复,value覆盖 | 唯一不重复 |