Java中Set真的是無序的嗎?


    我們經常聽說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元素按自然順序排序


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM