我们常说List集合是有序、可重复;Set集合是无序、不可重复的。
那么我们试试一个程序,说明为什么LinkedHashSet是“有序”的呢?
package com.ilaoda.day0912;
import java.util.LinkedHashSet;
import java.util.Set;
/**
* 测试 LinkedHashSet
* @author Administrator
*
*/
public class Test2 {
public static void main(String[] args) {
Set set = new LinkedHashSet();
set.add("World");
set.add("iLaoda");
set.add("Hello");
System.out.println(set);
//打印:[World, iLaoda, Hello]
}
}
结果:
[World, iLaoda, Hello]
为什么会出现存入和取出一样的呢?不是说Set集合是无序、不重复的吗?怎么会矛盾呢?
其实,所说的无序不重复中的“无序”,指的是在存入的时候,上一个元素和下一个元素在链表中的位置不是挨着的,很随意,可能中间相隔多个间隔,而且位置顺序也没有前后之分(这才是通常所说的“无序”)。
但是,每存入的前后元素,他们是通过引用来指向存入的前后元素。即相当于给每个存入的元素编号,他们的编号是有顺序的,但是所在的存储位置是没顺序的,所以打印出来的结果就是按照存入的顺序。
所以,我们要理解,所说的无序,是指所存储的位置之间无序。
下面,我画张图说明一下。