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