Set类继承了Conllection类,是一种集合类。Set的实现类有三个,下面我们会一一来说这些的不一样。

HashSet

HashSet类按照哈希算法来存取集合中的对象,存取速度比较快。

1.Set中是不能出现重复数据的。

2.Set中可以出现空数据。

3.Set中的数据是无序的。

详细见demo:

Set set = new HashSet();
for(int i= 0;i<6;i++){
set.add(i+"");
}
set.add("3");//重复数据,不会写入
set.add(null);//可以写入空数据
Iterator iter = set.iterator();
while(iter.hasNext()){
System.out.println(iter.next());//输出是无序的
}

这段执行之后的打印输出是:

null

3

2

1

0

5

4

LinkedHashSet

这个相对于HashSet来说有一个很大的不一样是LinkedHashSet是有序的。LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet。

详细见demo:

Set set = new LinkedHashSet();
for(int i= 0;i<6;i++){
set.add(i+"");
}
set.add("3");//重复数据,不会写入
set.add(null);//可以写入空数据
Iterator iter = set.iterator();
while(iter.hasNext()){
System.out.println(iter.next());//输出是有序的
}

输出打印如下:

0

1

2

3

4

5

null

TreeSet

TreeSet的特点是:

1.不能写入空数据

2.写入的数据是有序的。

3.不写入重复数据

详细见demo:

Set set = new TreeSet();
for(int i= 0;i<6;i++){
set.add(i+"");
}
set.add("3");//重复数据,不会写入
//set.add(null);//不可以写入空数据
Iterator iter = set.iterator();
while(iter.hasNext()){
System.out.println(iter.next());//输出是有序的
}

输出打印为:

0

1

2

3

4

5