我们经常说List是有序且重复的,而Set是无序不重复的。
这里就有一个误区,这里说的顺序有两个概念:
一是按添加的顺序排列,二是按自然顺序a-z排列。
在这里Set并不是无序的,传统说的Set无序是指HashSet。
HashSet:不能保证元素的添加顺序,更不能保证自然顺序,而Set的其他实现类是可以实现这两种顺序的。
LinkedHashSet:保证元素添加的顺序;
TreeSet:保证元素自然的顺序。
下面通过一个实例看下就明白了:
HashSet
Set<String> set = new HashSet<>(); set.add("s1"); set.add("s5"); set.add("s3"); set.add("s6"); set.add("s2"); set.add("s4"); for (String str: set) { System.out.print(str + " "); }
HashSet输出:s3 s4 s5 s6 s1 s2
LinkedHashSet
Set<String> set = new LinkedHashSet<>(); set.add("s1"); set.add("s5"); set.add("s3"); set.add("s6"); set.add("s2"); set.add("s4"); for (String str: set) { System.out.print(str + " "); }
LinkedHashSet输出:s1 s5 s3 s6 s2 s4
TreeSet
Set<String> set = new TreeSet<>(); set.add("s1"); set.add("s5"); set.add("s3"); set.add("s6"); set.add("s2"); set.add("s4"); for (String str: set) { System.out.print(str + " "); }TreeSet输出:s1 s2 s3 s4 s5 s6