HashSet、LinkedHashSet、TreeSet使用区别

时间:2021-01-20 17:56:59

HashSet:哈希表是通过使用称为散列法的机制来存储信息的,元素并没有以某种特定顺序来存放;

TreeSet:提供一个使用树结构存储Set接口的实现,对象以升序顺序存储,访问和遍历的时间很快。

LinkedHashSet:以元素插入的顺序来维护集合的链接表,允许以插入的顺序在集合中迭代;

//HashSet
HashSet<String>  strHashSet = new HashSet<String>();
strHashSet.add("d");
strHashSet.add("a");
strHashSet.add("u");
strHashSet.add("e");
strHashSet.add("s");
strHashSet.add("q");
strHashSet.add("p");
strHashSet.add("r");
System.out.println("HashSet --------" + strHashSet);
//TreeSet
TreeSet<String>  strTreeSet = new TreeSet<String>();
strTreeSet.add("d");
strTreeSet.add("a");
strTreeSet.add("u");
strTreeSet.add("e");
strTreeSet.add("s");
strTreeSet.add("q");
strTreeSet.add("p");
strTreeSet.add("r");
System.out.println("TreeSet --------" + strTreeSet);
//LinkedHashSet
LinkedHashSet<String>  strLinkedHashSet = new LinkedHashSet<String>();
strLinkedHashSet.add("d");
strLinkedHashSet.add("a");
strLinkedHashSet.add("u");
strLinkedHashSet.add("e");
strLinkedHashSet.add("s");
strLinkedHashSet.add("q");
strLinkedHashSet.add("p");
strLinkedHashSet.add("r");
System.out.println("LinkedHashSet --" + strLinkedHashSet);

输出

HashSet --------[p, a, q, r, s, d, u, e]
TreeSet --------[a, d, e, p, q, r, s, u]
LinkedHashSet --[d, a, u, e, s, q, p, r]

HashSet输出是和原来的添加的顺序是不一致的,因为其保存的位置是根据其哈希值来确定.
TreeSet使用红黑树结构进行保存,因此其内部是有序的,输出也是有序的.
LinkedHashSet使用链表来保存,因此输出时和插入时的顺序是一致的.