Set:一般用来去重,但是我同时也想保留顺序 所以做了如下测试
步骤
运行如下代码:
public class Test {
public static void main(String[] args) {
List<Integer> a = new ArrayList<>();
a.add(6);
a.add(4);
a.add(3);
a.add(7);
a.add(8);
a.add(1);
Set<Integer> treeSet = new TreeSet<Integer>(a);
Set<Integer> hashSet = new HashSet<Integer>(a);
Set<Integer> linkedHashSet = new LinkedHashSet<Integer>(a);
System.out.println("原始顺序:");
Iterator iterator = a.iterator();
while(iterator.hasNext()){
System.out.print(iterator.next()+"、");
}
System.out.println();
System.out.println("treeSet顺序:");
Iterator iteratorTreeSet = treeSet.iterator();
while(iteratorTreeSet.hasNext()){
System.out.print(iteratorTreeSet.next()+"、");
}
System.out.println();
System.out.println("hashSet顺序:");
Iterator iteratorHashSet = hashSet.iterator();
while(iteratorHashSet.hasNext()){
System.out.print(iteratorHashSet.next()+"、");
}
System.out.println();
System.out.println("linkedHashSet顺序");
Iterator iteratorLinkedHashSet = linkedHashSet.iterator();
while(iteratorLinkedHashSet.hasNext()){
System.out.print(iteratorLinkedHashSet.next()+"、");
}
}
}
结果是
原始顺序:
6、4、3、7、8、1、
treeSet顺序:
1、3、4、6、7、8、
hashSet顺序:
1、3、4、6、7、8、
linkedHashSet顺序
6、4、3、7、8、1、
结论
LinkedHashSet可以保留顺序
TreeSe和HashSet 不可以保留顺序
原因
底层是链表实现的,是set集合中唯一一个能保证怎么存就怎么取的集合对象,因为是HashSet的子类,所以也是保证元素唯一的,与HashSet的原理一样。