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);
		
	}
}

 

posted @ 2018-01-06 10:15  菜鸟也要飞一飞  阅读(6582)  评论(0编辑  收藏  举报