QA2:為什么說List是有序而Set是無序?


List 和 Set 是 Colleiton 的 子接口。

接口標准為:

  List : 有序可重

  Set : 無序不可重

  其實,有序或無序是指是否按照其添加的順序來存儲對象。List 是按照元素的添加順序來存儲的。而 Set 的實現類都有一套自己的排序算法,每添加一個元素,都會按照其內部算法將元素添加到合適的位置,所以不能保證內部存儲是按元素添加的順序而存儲的。

測試用例:

package wy.Collection;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

/**
 * 測試 List 的有序,Set的無序
 * @author Gabrielle
 *
 */
public class Test01_AddedOrder {
	public static void main(String[] srgs) {
		
		List<String> list = new ArrayList<String>();
		list.add("s1");
		list.add("s3");
		list.add("s4");
		list.add("s5");
		list.add("s2");
		// 輸出結果:list = [s1, s3, s4, s5, s2]
		System.out.println("list = " + list);
		
		Set<String> set1 = new TreeSet<String>();
		set1.add("s1");
		set1.add("s3");
		set1.add("s4");
		set1.add("s5");
		set1.add("s2");
		// 輸出結果:TreeSet=[s1, s2, s3, s4, s5]
		System.out.println("TreeSet=" + set1);
		
		Set<String> set2 = new HashSet<String>();
		set2.add("s1");
		set2.add("s3");
		set2.add("s4");
		set2.add("s5");
		set2.add("s2");
		// 輸出結果:HashSet=[s3, s4, s5, s1, s2]
		System.out.println("HashSet=" + set2);
		
		Set<String> set3 = new LinkedHashSet<String>();
		set3.add("s1");
		set3.add("s3");
		set3.add("s4");
		set3.add("s5");
		set3.add("s2");
		// 輸出結果:LinkedHashSet=[s1, s3, s4, s5, s2]
		System.out.println("LinkedHashSet=" + set3);
		
	}
}

 


免責聲明!

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



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