<script type="text/javascript"></script><script></script>
LinkedHashMap和LinkedHashSet是JDK 1.4中引入的两个新的集合类。虽然已经过去5年了,但我敢打赌并不是很多人都用过(因为我就没有用过)。但这两个类在某些情况下还是非常有用的,过去没有用,现在没有用,都没有关系。但还是应该对这两个Collection框架的新成员有所了解,因为也许以后你会到,或者其实你现在就应该要用到。
LinkedHashMap/LinkedHashSet 顾名思义,就是在Hash的实现上添加了Linked的支持。对于HashMap/HashSet的每个节点上通过一个链表串联起来,这样就可以保证确定的顺序。对于希望有常量复杂度的高效存取性能要求,同时有要求排序的情况下,现在可以直接使用LinkedHashMap/Set了。
对于LinkedHashMap还有一点特别注意,LinkedHashMap支持两种排序:插入顺序、访问顺序。前者是指按照插入时的顺序排序,后者是指按照最旧使用到最近使用的顺序。即如果在一个LinkedHashMap中有5个节点,现在的顺序是e1, e2, e3, e4, e5. 如果是使用顺序的话,现在访问了一次e2, 那么e2节点将移至链表的尾部。现在顺序变为:e1, e3, e4, e5, e2.
这会造成严重的性能问题吗?答案当然是否定的。因为在这儿的链表操作是常量级的。这也是LinkedHashMap/Set在这儿比TreeMap/Set性能更高的原因。
同样,LinkedHashMap/Set也不是thread-safe的。如果在多线程下访问,是需要进行外部同步,或者使用Collections.synchronizedMap()的方法包装成一个thread-safe的Map/Set。
特别需要注意的是,在使用“访问顺序”时,读取节点操作也是“结构变化”的操作。因为,这会改变元素遍历的顺序。所以,在使用LinkedHashMap的iterator()方法,遍历元素时,如果其它线程有读取操作,也要进行同步。否则,也会抛出同其它fail-fast一样的由于删除或增加操作而引起的CurrentModificationException的例外。
相关推荐
提供了LinkedHashMap和LinkedHashSet更多最新版本。 您可以在std或no_std环境中轻松使用它。 一些实用的功能组合,支持,帮助您更好地将其嵌入到现有代码: serde , inline-more等。特别是,它使用griddle在默认...
RiteLinked——类似HashMap的容器,以用户可控的顺序保存它们的键值对RiteLinked提供了LinkedHashMap和LinkedHashSet更多最新版本。您可以在std或no_std环境中轻松使用它。一些实用的功能组合,支持,帮助您更好地将...
2. ArrayList & LinkedList、HashMap & LinkedHashMap & TreeMap & ConcurrentHashMap、HashSet & LinkedHashSet & TreeSet 3. 知道 Java 中各种变量类型 4. 熟悉 Java String 的使用,熟悉 String 的各种函数 5. ...
此板条箱是链接哈希表的一个分支,用于构建o hashlink-类HashMap的容器,将其键值对保存在用户中可控制的顺序该板条箱是基于hash-brown的links-hash-map的一个分叉,用于实现LinkedHashMap,LinkedHashSet和LruCache...
本指南将深入探讨HashMap、HashSet、HashTable、LinkedHashMap、LinkedHashSet、ArrayList、LinkedList、ConcurrentHashMap等主要集合类的实现原理,以及它们在实际应用中的选择与比较。 首先,HashMap是最常用的...
这个库模拟了 Java 的集合框架。 共有 7 个类(ArrayList、HashMap、HashSet、TreeMap、TreeSet、LinkedHashMap、LinkedHashSet)可用。 以更快更有效的方式组织您的 JavaScript 数据。
LinkedHashMap和LinkedHashSet保持了元素的插入顺序,方便遍历。另外,引入了TreeMap和TreeSet的子类NavigableMap和NavigableSet,支持高效的区间查询和排序。 二、Stream API Java 8 引入了Stream API,这是一组...
本系列深入讲解了Java集合框架中的重要组成部分,包括HashMap、ArrayList、LinkedHashMap、HashSet以及LinkedHashSet。这五个文件分别揭示了这些数据结构的内部实现原理和它们在实际应用中的性能特点。 首先,我们...
LinkedHashSet则是基于LinkedHashMap,保持了元素的插入顺序。TreeSet基于TreeMap,其元素按自然排序或自定义比较器排序。 下面是一些关于这些类的使用示例: ```java Map, String> map1 = new HashMap(); // 插入...
LinkedHashMap类似LinkedHashSet;TreeMap类似TreeSet。 在选择Java集合时,需要考虑元素是否是键值对形式的、是否需要排序、是否唯一(或有序)等因素。如果元素是键值对形式的,可以选择Map,V>,否则可以选择...
- 有序性:ArrayList保持插入顺序,LinkedList支持高效插入删除,LinkedHashSet和LinkedHashMap保持插入或访问顺序。 - 性能考虑:ArrayList适合随机访问,LinkedList适合顺序遍历。 5. **使用集合的原因**: - ...
// HashSet不保证迭代顺序, LinkedHashSet按照元素插入的顺序迭代. // 学习List对象容器的使用 // List容器中的对象允许重复 // 常用的list接口的实现类有ArrayList和LinkedList // 学习map对象容器的使用 // map...
JDK源码学习 JDK版本基于1.7 集合框架的学习 ArrayList原始码学习 HashMap原始码学习 LinkedList原始码学习 HashSet原始码学习 LinkedHashMap原始学习 LinkedHashSet原始码学习
HashSet 是一种哈希集,元素的顺序是随机的,LinkedHashSet 是一种链表集,元素的顺序是按照添加顺序的,TreeSet 是一种树形集,元素的顺序是按照比较器的顺序的。 Map 是一种键值对的集合,提供了许多有用的方法来...
4. LinkedHashSet:继承于HashSet,并且其内部是通过LinkedHashMap实现的。 5. TreeSet:红黑树(自平衡的排序二叉树)。 6. HashMap:JDK1.8之前由数组+链表组成,JDK1.8以后在解决哈希冲突时有了较大的变化。 7. ...
在使用散列的数据结构(HashSet、HashMap、LinkedHashSet 或者 LinkedHashMap)时,最好先覆盖 hashCode() 和 equals(),因为从 Object 继承下来的 hashCode() 方法默认是使用对象的地址计算散列值。 hashCode 对于...
如果需要元素有序,可以选择TreeSet、TreeMap、LinkedHashSet、LinkedHashMap等实现类;如果对集合操作性能有特别要求,比如需要快速访问,则可以选择ArrayList、HashMap等。 最后,Java集合框架还遵循了一定的设计...
### Java中的Set与Map集合详解 #### 一、Set系列集合概述 ...而在需要保持元素的插入顺序时,则应选择`LinkedHashSet`或`LinkedHashMap`;如果需要对元素进行排序,则应该使用`TreeSet`或`TreeMap`。