Java的LinkedHashSet解析
作者:兴趣使然的程序猿
这篇文章主要介绍了Java的LinkedHashSet解析,Set接口的哈希表和链表实现,具有可预测的迭代顺序,此实现与 HashSet的不同之处在于它维护一个双向链表,该列表贯穿其所有条目,这个链表定义了迭代顺序,需要的朋友可以参考下
LinkedHashSet
LinkedHashSet用的也比较少,其也是基于Set的实现。
1 LinkedHashSet继承关系
和HashSet一样,其也是Set接口的实现类,并且是HashSet的子类。
2 LinkedHashSet源码
package java.util; public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, java.io.Serializable { private static final long serialVersionUID = -2851667679971038690L; public LinkedHashSet(int initialCapacity, float loadFactor) { //调用HashSet的构造方法 super(initialCapacity, loadFactor, true); } public LinkedHashSet(int initialCapacity) { super(initialCapacity, .75f, true); } public LinkedHashSet() { super(16, .75f, true); } public LinkedHashSet(Collection<? extends E> c) { super(Math.max(2*c.size(), 11), .75f, true); addAll(c); } @Override public Spliterator<E> spliterator() { return Spliterators.spliterator(this, Spliterator.DISTINCT | Spliterator.ORDERED); } }
其操作方法和HashSet完全一样,那么二者区别是什么呢?
1.首先LinkedHashSet是HashSet的子类。
2.LinkedHashSet中用于存储值的实现LinkedHashMap,而HashSet使用的是HashMap。
LinkedHashSet中调用的父类构造器,可以看到其实列是一个LinkedHashMap。
HashSet(int initialCapacity, float loadFactor, boolean dummy) { map = new LinkedHashMap<>(initialCapacity, loadFactor); }
LinkedHashSet的实现很简单,更深入的了解需要去看LinkedHashMap的实现,对LinkedHashMap的解析将单独提出。
实现
LinkedHashSet底层使用LinkedHashMap存储元素。
LinkedHashSet是有序的,它是按照插入顺序排序的。
public LinkedHashSet() { super(16, .75f, true); } HashSet(int initialCapacity, float loadFactor, boolean dummy) { map = new LinkedHashMap<>(initialCapacity, loadFactor); }
LinkedHashSet中没有定义如添加、删除等方法,调用的都是父类HashSet中的方法
不支持按访问顺序访问,只能按插入顺序访问。
用法
import java.util.*; public class Test { public static void main(String[] args) { LinkedHashSet<Integer> set = new LinkedHashSet<>(); set.add(3); set.add(1); System.out.println(set.toString()); }
到此这篇关于Java的LinkedHashSet解析的文章就介绍到这了,更多相关LinkedHashSet解析内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!