我們經常聽說List是有序且可重復的,Set是無序且不重復的。這是一個誤區,這里所說的順序有兩個概念,一是按照添加的順序排列,二是按,照自然順序a-z排列。Set並不是無序的傳統所說的Set無序指的是HashSet,它不能保證元素的添加順序,更不能保證自然順序,而Set的其他實現類是可以實現這兩種順序的。
1,LinkedHashset : 保證元素添加的自然順序
2,TreeSet : 保證元素的自然順序
通過下面一段代碼來理解上述問題:
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;
public class Prectice {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("String1");
set.add("String4");
set.add("String3");
set.add("String2");
set.add("String5");
set.forEach(e-> System.out.print(e+" "));
System.out.println();
//LinkedHashSet會保證元素的添加順序
Set<String> set2 = new LinkedHashSet<>();
set2.add("String1");
set2.add("String5");
set2.add("String3");
set2.add("String4");
set2.add("String2");
set2.forEach(e-> System.out.print(e+" "));
System.out.println();
//TreeSet保證元素自然順序
Set<String> set3 = new TreeSet<>();
set3.add("String1");
set3.add("String5");
set3.add("String4");
set3.add("String2");
set3.add("String3");
set3.forEach(e-> System.out.print(e+" "));
}
}
輸出結果:
String5 String4 String3 String2 String1 HashSet元素亂序
String1 String5 String3 String4 String2 LinkedHashSet保證元素添加順序
String1 String2 String3 String4 String5 TreeSet元素按自然順序排序