码迷,mamicode.com
首页 > 其他好文 > 详细

LinkedHashMap

时间:2018-12-27 22:58:31      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:容量   cap   分享   因子   ash   不同   插入   空间   shm   

LinkedHashMap是HashMap的子类,它可以依照插入的顺序来存储元素,LinkedHashMap的存储结构采用了双重链表,因此元素的增加、修改和删除效率都比较高。

一、存储结构

技术分享图片
从图中可以看出,LinkedHashMap和HashMap的存储结构基本相同,都是数组+链表。唯一不同的是,链表节点有两个指针,分别是before和after,指向该节点的直接后继和直接前驱,再通过双向链表表头节点,就可以实现从双向链表中的任意一个节点开始,很方便地访问它的前驱节点和后继节点。
LinkedHashMap采用的hash算法和HashMap相同,但它扩展了Entry。LinkedHashMap中的Entry增加了before和after两个指针,用于维护双向链表。图中的next指针用于维护Map中各个Entry的连接顺序,before、after用于维护Entry插入的先后顺序。

二、构造函数
LinkedHashMap提供了5个构造函数,它们都是在HashMap的构造函数的基础上实现的,分别如下:
1.LinkedHashMap()
用于构造默认存储元素容量为16,、负载因子为0.75的LinkedHashMap对象。其中容量为可存储元素的初始长度,负载因子表示散列表空间的使用程度,负载因子越大则散列表就能容纳更多的元素,存储的元素过多,索引效率就会降低。
2.LinkedHashMap(int initialCapacity, float loadFactor)
用于构造指定初始容量和负载因子的LinkedHashMap对象。
3.LinkedHashMap(int initialCapacity)
用于构造指定初始容量、负载因子默认为0.75的LinkedHashMap对象。
4.LinkedHashMap(Map m)
用于构造指定具有相同Map的LinkedHashMap对象,该对象初始容量依赖于传入Map的容量,负载因子默认为0.75。
5.LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)
用于构造指定容量、负载因子、迭代顺序的LinkedHashMap对象。

三、遍历
同HashMap相同,LinkedHashMap也不能用迭代器、foreach等方法遍历。如果需要遍历LinkedHashMap,可以通过如下方法:
Map<String, Object> map = new LinkedHashMap<String, Object>();
map.put("A", "张三");
map.put("B", "李四");
map.put("C", "王五");
// 遍历
Set<Entry<String, Object>> set = map.entrySet();
Iterator<Entry<String, Object>> iter = set.iterator();
while(iter.hasNext()) {
    Entry<String, Object> entry = iter.next();
    String key = entry.getKey();
    Object val = entry.getValue();
    System.out.println(key + " " + val);
}

LinkedHashMap

标签:容量   cap   分享   因子   ash   不同   插入   空间   shm   

原文地址:https://www.cnblogs.com/yuanfei1110111/p/10187515.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!