LinkedHashMap存取数据,还是跟HashMap一样使用的Entry[]的方式,双向链表只是为了保证顺序。 LinkedHashMap是线程不安全的。...同样的数据,我们再试试LinkedHashMap Map linkedHashMap = new LinkedHashMap(); linkedHashMap.put...有插入顺序和访问顺序两种就可以 回到顶部 TreeMap的用法(主要是排序) TreeMap中默认的排序为升序,如果要改变其排序可以自己写一个Comparator import java.util.Comparator...; import java.util.Iterator; import java.util.Set; import java.util.TreeMap; public class Compare {...public static void main(String[] args) { TreeMap map = new TreeMap<String
HashMap, TreeMap, LinkedHashMap 对比 1....存储结构 HashMap 存储结构: 数组 + 链表 + 红黑树 LinkedHashMap 存储结构 和HashMap 相同,区别是维护一个根据插入顺序保持的双向链表 TreeMap 存储结构: 红黑树...是否有序 HashMap 无序 LinkedHashMap 根据插入先后顺序确定遍历顺序 TreeMap 有序,根据Key进行比较获取先后顺序 3....应用场景&使用小建议 HashMap, LinkedHashMap, TreeMap 非线程安全,因此都不适用于多线程环境下 希望有序的Map,考虑采用 LinkedHashMap, TreeMap...(一) : 底层数据结构 JDK容器学习之TreeMap (二) : 使用说明 JDK容器学习之LinkedHashMap (一):底层存储结构分析 JDK容器学习之LinkedHashMap(二):
这篇文章中,我会带你们看看HashMap, TreeMap, HashTable和LinkedHashMap的区别。 1....Map概览 Java SE中有四种常见的Map实现——HashMap, TreeMap, Hashtable和LinkedHashMap。...TreeMap以红-黑树结构为基础,键值按顺序排列。 LinkedHashMap保存了插入时的顺序。 Hashtable是同步的(而HashMap是不同步的)。...LinkedHashMap LinkedHashMap is a subclass of HashMap....linkedHashMap = new LinkedHashMap(); linkedHashMap.put(d1, 10);
1、基本介绍 HashMap、TreeMap、HashTable、LinkedHashMap 共同实现了接口java.util.Map, 都是键值对形式,且map的key不允许重复 2、详细介绍 a...对于LinkedHashMap而言,它继承与HashMap、底层使用哈希表与双向链表来保存所有元素。其基本操作与父类HashMap相似,它通过重写父类相关的方法,来实现自己的链接列表特性。...的遍历速度和他的容量有关 d、TreeMap TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap...进行降序排序,这点是LinkedHashMap不能实现的 具体代码如下: //默认的TreeMap升序排列 Map map1 = new TreeMap...那么使用LinkedHashMap吧,怎么用怎么爽 4、如果需要让Map按照key进行升序或者降序排序,那就用TreeMap吧 Map集合强大之处还需要各位的挖掘,如有说错的地方,还望大家指正,如有补充
Hashtable与 HashMap类似。...TreeMap TreeMap实现SortMap接口,能够把它保存的记录根据键排序。...LinkedHashMap LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的。...2、TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。 ...3、LinkedHashMap 是HashMap的一个子类,如果需要输出的顺序和输入的顺序相同,那么用LinkedHashMap可以实现。
HashMap、TreeMap、LinkedHashMap 三者有啥相同点,有啥不同点?...不同点: HashMap 数据结构以数组为主,查询非常快, TreeMap 数据结构以红黑树为主,利用了红黑树左小右大的特点,可以实现 key 的排序, LinkedHashMap 在 HashMap...的基础上增加了链表的结构,实现了插入顺序访问和最少访问删除两种策略; 由于三种 Map 底层数据结构的差别,导致了三者的使用场景的不同, TreeMap 适合需要根据 key 进行排序的场景, LinkedHashMap
LinkedHashMap中有一个重要的数据: // LinkedEntry就是一个双向链表。...next); this.nxt = nxt; this.prv = prv; } } 接下来看源代码: public class LinkedHashMap...header; e.prv = oldTail; oldTail.nxt = header.prv = e; modCount++; } } LinkedHashMap...如果是按照读取顺序来排序的,那么还要将这个节点放到双向链表的最后一位(这个特性,可以实现LRU算法) 参考: http://wiki.jikexueyuan.com/project/java-collection/linkedhashmap.html
LinkedHashMap概述: LinkedHashMap是HashMap的一个子类,它保留插入的顺序,如果需要输出的顺序和输入时的相同,那么就选用LinkedHashMap。...LinkedHashMap实现与HashMap的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。...LinkedHashMap的实现: 对于LinkedHashMap而言,它继承与HashMap、底层使用哈希表与双向链表来保存所有元素。...其基本操作与父类HashMap相似,它通过重写父类相关的方法,来实现自己的链接列表特性。...如果你想构造一个LinkedHashMap,并打算按从近期访问最少到近期访问最多的顺序(即访问顺序)来保存元素,那么请使用下面的构造方法构造LinkedHashMap: public LinkedHashMap
LinkedHashMap学习 关系图 双向链表 static class Entry extends HashMap.Node { //after、before..., V value, Node next) { super(hash, key, value, next); } } 构造方法 public LinkedHashMap...(int initialCapacity) { super(initialCapacity); accessOrder = false; } public LinkedHashMap...() { super(); accessOrder = false; } public LinkedHashMap(Map<?...putMapEntries(m, false); } /* *一般用此构造方法,accessOrder用来指定是否按顺序访问,如果为true就是按顺序访问,false根据新增排序 */ public LinkedHashMap
accessOrder的解释 代码演示 @Test public void fun2() throws Exception { LinkedHashMap accessOrderTrue = new LinkedHashMap(16, 0.75f, true); accessOrderTrue.put("1","1")
简单说明一下这个问题(水平有限,不保证完全正确),这里这么做确实会浪费空间,但与 TreeNode 通过继承获取的组成链表的能力相比,这点浪费是值得的。...但在 HashMap 中,put 方法插入的是 HashMap 内部类 Node 类型的节点,该类型的节点并不具备与 LinkedHashMap 内部类 Entry 及其子类型节点组成链表的能力。...3.2 链表节点的删除过程 与插入操作一样,LinkedHashMap 删除操作相关的代码也是直接用父类的实现。...在 Java 集合框架中,HashMap、LinkedHashMap 和 TreeMap 三个映射类基于不同的数据结构,并实现了不同的功能。...LinkedHashMap 在其之上,通过维护一条双向链表,实现了散列数据结构的有序遍历。TreeMap 底层基于红黑树实现,利用红黑树的性质,实现了键值对排序功能。
LinkedHashMap是按照默认插入的顺序排列的。...public static void main(String[] args) { Map map = new LinkedHashMap<String,
LinkedHashMap维护插入的顺序。...LinkedHashMap实例,可自己指定初始容量,负载因子和排序模式....构造一个维护插入顺序的LinkedHashMap实例,该实例具有与指定map相同的映射关系,创建的LinkedHashMap实例具有默认的加载因子(0.75)和足以容纳指定map中映射的初始容量....下面一起看下 LinkedHashMap 插入相关代码....5 链表节点的删除 HashMap 中保存的允许 LinkedHashMap 后处理的回调 与插入操作一样,LinkedHashMap 删除操作相关的代码也是直接用父类的实现.
转载请以链接形式标明出处: 本文出自:103style的博客 base on jdk_1.8.0_77 目录 LinkedHashMap简介 LinkedHashMap的全局变量介绍 LinkedHashMap...的构造函数 LinkedHashMap重写的函数 小结 参考文章 ---- LinkedHashMap简介 HashMap 是无序的,HashMap 在 put 的时候是根据 key 的 hashcode...class LinkedHashMap extends HashMap implements Map LinkedHashMap 是 HashMap 的子类。...它保留插入的顺序,如果需要输出的顺序和输入时的相同,那么就选用 LinkedHashMap。 LinkedHashMap 是 Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。...LinkedHashMap 实现与 HashMap 的不同之处在于,LinkedHashMap 维护着一个运行于所有条目的 双重链接列表。
LinkedHashMap 源码分析 1....继承 继承的是 HashMap 这个就比较熟悉了,事实上我们会看到 LinkedHashMap 代码量非常的少,主要就是因为他继承的 HashMap ,继承了大多数的操作。...// 双向链表的头结点 transient LinkedHashMap.Entry head; // 双向链表的尾节点 transient LinkedHashMap.Entry tail...Entry 节点 可能看过前面关于 HashMap 源码分析的都清楚,里面有一个 TreeNode 节点,他继承的就是 LinkedHashMap 中的 Entry 节点。...= e) { LinkedHashMap.Entry p = (LinkedHashMap.Entry)e, b = p.before
继List之后,笔者又开始了Set与Map的源码探究,本次研究HashMap,HashSet,TreeMap,TreeSet。...但是点进去后发现,HashSet与TreeSet点进去后其实就是HashMap与TreeMap。。。。。。...public TreeMap(Comparator<?...TreeMap(SortedMap<K, ?...这种方式的巧妙之处在于,总是将删除的当前节点向叶子节点方向移动,保证最后没有两个孩子节点时就可以执行真正的删除了,而利用右子树的最小节点与自身交换的动作并不会破坏二叉查找树的任何特性。
三连即是对作者我写作道路上最好的鼓励与支持! 如下是Java集合体系架构图,近期几期内容都是围绕该体系进行知识讲解,以便于同学们学习Java集合篇知识能够系统化而不零散。...通过对TreeMap的学习,读者可以了解到TreeMap的特点和使用方法,以及它与其他Map实现的不同之处。...TreeMap中的键值对是按照键的自然顺序或者指定的比较器顺序进行排序的。因此,TreeMap具有查找和排序的功能。...优缺点分析 优点 TreeMap能够实现对键值对的排序和查找; TreeMap基于红黑树实现,保证操作的时间复杂度为O(log n); TreeMap支持键的自然顺序或者自定义比较器顺序。...在这两个方法中,首先将要旋转的节点的子节点先保存起来,然后更新节点的子节点和父节点,并将要旋转的节点的子节点与父节点相连。最后,将要旋转的节点与其左右子节点中的另一个节点相连,以完成旋转操作。
本文将详细介绍Java中的Map接口及其常见实现类,包括HashMap、TreeMap和LinkedHashMap,并提供一些示例代码。...TreeMap:基于红黑树实现,可以对键进行排序,并提供了一系列与排序相关的方法,适用于需要对键进行排序的场景。...三、TreeMap TreeMap是Map接口的另一个常见实现类,它基于红黑树实现,可以对键进行排序,并提供了一系列与排序相关的方法。...最后,我们检查LinkedHashMap中是否包含特定的键。 总结 在本文中,我们详细介绍了Java中的Map接口及其常见实现类:HashMap、TreeMap和LinkedHashMap。...HashMap适用于需要快速查找和插入键值对的场景,TreeMap适用于需要对键进行排序的场景,而LinkedHashMap适用于需要保持插入顺序的场景。
现在我们已经知道了有关红黑树的所有知识,下面我们分析一下TreeMap的底层源码,看TreeMap底层是怎么实现红黑树的逻辑的。我们还是和其它集合一样还是先看TreeMap的初始化。 ? ?...上面是TreeMap的无参构造函数,我们发现当我们通过参构造函数创建TreeMap对象时,并不会执行底层树结构的初始化,而只是将comparator设置为空。...那么通过我们以往分析其它集合时总结的规律,TreeMap的初始化一定是在第一次调用put方法时执行的。下面我们将重点看一下TreeMap中的put方法。 ? ? ? ? ?...总结 在TreeMap中不允许用null做为key保存到TreeMap集合中 我们在分析源码时并没有发现同步关键字synchronized,这就说明TreeMap也不是一个线程安全的集合类 我们在分析源码时知道...TreeMap每次都添加元素时都会进行key的比较,所以我们在使用TreeMap集合是必须保证存储在TreeMap中的元素是可以比较的,否则虚拟机会直接抛出一场。
另一方面,由于 TreeMap 基于红黑树实现,这为 TreeMap 保持键的有序性打下了基础。总的来说,TreeMap 的核心是红黑树,其很多方法也是对红黑树增删查基础操作的一个包装。...所以只要弄懂了红黑树,TreeMap 就没什么秘密了。 二、概览 TreeMap继承自AbstractMap,并实现了 NavigableMap接口。...以上就是 TreeMap 的继承体系,描述起来有点乱,不如看图了: ? 上图就是 TreeMap 的继承体系图,比较直观。...3.1 查找 TreeMap基于红黑树实现,而红黑树是一种自平衡二叉查找树,所以 TreeMap 的查找操作流程和二叉查找树一致。...= null); } else { // 与上面代码逻辑类似,省略 } Entry e = new Entry(key, value, parent
领取专属 10元无门槛券
手把手带您无忧上云