前言
之前文章,对Hashset进行了原理分析。Hahset的特点是无序,且不能重复。那我如果想有序不重复怎么办呢。LinkedHashset可以完全的满足你的要求。相比较于Hashset的无序,LinkedHashset是有序的,那么它是怎么实现有许序的呢。接下里的内容就是讲诉,他是怎么实现有序的。
LinkedHashset使用
首先,我们还是先来看下LinkeHashset的一些主要的方法如下图
和Hashset类似,主要的方法也是add和remove,分别为添加方法和删除方法。当然还有很多的方法我们就不在这里一一的介绍了。同样的它和Hashset一样也是不能重复的,添加相同的数据会添加失败,同样添加引用类型的数据,必须重写引用对象的hashcode方法和equals方法。接下我们再来验证下它是不是真的有序,如下图
LinkedHashset底层源码
首先我们看下Linkedhashset继承和实现,如下图
LinkedHashset是继承自Hashset,它的构造方法,也是调用的Hashset的构造方法,但是他的底层可不是Hashmap,如下图
Linkedhashset虽然是调用的Hashset的构造方法,但是确实调用的用LinkedHashMap初始化的构造方法。所以他的底层是LinkedHashMap,至于为什么LinkedHashMap可以实现有序性。你只需要记住LinkedHashMap本质就是在HashMap上多了一个双向链表,通过双向链表实现的有序性。详细内容等到LinkedHashMap再详细讲述。
总结
今天主要介绍了LinkedHashSet,他是继承Hashset,但是底层却和Hashset不一样,Hashset的低层是通过Hashmap实现的。而LinkedHashset底层是LinkedHashmap实现的,所以LinkedHashset是有序的,而Hashset是无序的。