HashSet、TreeSet、LinkedHashSet的关系

HashSet与TreeSet同属于集合Set下,都是基于Set接口的实现类。其中TreeSet是Set的子接口SortedSet的实现类
HashSet、TreeSet、LinkedHashSet的关系
Set接口:
Set是系列放在一起的数据,数据不能重复
Set接口、Set不能重复。

HashSet:
元素不是按顺序排列、非同步;
HashSet是无序,且不能重复的,因为使用是Hash表实现;
HashSet的底层使用HashMap实现;当向HashSet结合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据 hashCode值来决定该对象在HashSet中存储位置。

HashSet去重的原理:
1、判断这个的hashcode值,如果两个值的hashcode不相等,肯定不是同一个值。
如果hashcode,进入第二步判断:
2、调用equals方法判断,如果返回true,则肯定是同一个的对象,如果返回false,
HashSet、TreeSet、LinkedHashSet的关系HashSet无序、不能存放相同值。

TreeSet:
是排好序的集合,底层是一个二叉树。
特点
1、不能有重复的元素;
2、具有排序功能;
3、TreeSet中的元素必须实现Comparable接口并重写compareTo()方法(自行重写可自定排序规则;对于java类库中定义的类,TreeSet可以直接对其进行存储,如String,Integer等,因为这些类已经实现了Comparable接口)
要去重复要用到hashset,自定义类要实现hashcode和equals方法。
HashSet、TreeSet、LinkedHashSet的关系TreeSet可自动排序,不能有重复元素;
HashSet、TreeSet、LinkedHashSet的关系HashSet、TreeSet、LinkedHashSet的关系在Cat类(TreeSet类型对象)中重写compareTo规定排序规则:按照age从小到大;compareTo中返回正数则认为新加入的数据比比较的数据大,正序排序;返回0则平序排序;返回负数则倒序排:认为新加入的数据比比较的数据小,排在其前面。

LinkedHashSet:
LinkedHashSet同样不能有重复数据,按照插入顺序排序;

HashSet、TreeSet、LinkedHashSet的关系按插入顺序排序,不能有重复。

HashSet、TreeSet、LinkedHashSet关系比较:

HashSet、TreeSet、LinkedHashSet三者同属Set接口下;都可以存放数据;都不能出现重复数据。
HashSet:不能保证元素的排列顺序,顺序有可能发生变化(底层按照HashMap的的原理存入);
TreeSet与LinkedHashSet:加入数据时有序;
TreeSet:加入数据时按照规定的排序规则排序;
LinkedHashSet:数据按加入顺序排序;
LinkedHashSet集合同样是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起 来像是以插入顺 序保存的,也就是说,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能比不上HashSet。
读取时:TreeSet读取慢,HashSet和LinkedHashSet读取较快。