例子
public static void main(String[] args) { Set<String> set = new HashSet<>(); set.add("test1"); set.add("test7"); set.add("test3"); set.add("test6"); set.add("test1"); set.forEach(e -> System.out.println(e+" ")); System.out.println(); Set<String> linkedHashSet = new LinkedHashSet<>(); linkedHashSet.add("test1"); linkedHashSet.add("test7"); linkedHashSet.add("test3"); linkedHashSet.add("test6"); linkedHashSet.add("test1"); linkedHashSet.forEach(e -> System.out.println(e+" ")); System.out.println(); Set<String> treeSet = new TreeSet<>(); treeSet.add("test1"); treeSet.add("test7"); treeSet.add("test3"); treeSet.add("test6"); treeSet.add("test1"); treeSet.forEach(e -> System.out.println(e+" ")); System.out.println(); }
输出结果(注意每次运行结果一样):
test3
test6
test7
test1
test1
test7
test3
test6
test1
test3
test6
test7
总结
- Set是无序不重复的,是个误区
- 顺序通常指:按添加的顺序排列 和 按自然顺序a-z排列
- Set并不是无序的,传统说的Set无序是指HashSet,它不能保证元素的添加顺序,更不能保证自然顺序
-
LinkedHashSet可以保证元素添加的顺序
-
TreeSet可以保证元素自然的顺序