Set 接口
一、知识点回顾
Collection(根):
- List(有序且允许重复)
- ArrayList(数组)
- Vector(数组)
- LinkedList(链表)
- Set(无序且不允许重复)
- HashSet
- LinkedHashSet
- TreeSet
- HashSet
二、API中的Set接口
- Set接口:一个不包含重复元素的 collection。更确切地讲,set 不包含满足e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素
三、测试List和Set集合中null值的出现次数
package com.set.demo;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class NullTest {
@SuppressWarnings("all")
public static void main(String[] args) {
//测试List和Set集合中null值可以出现的次数
//List集合允许多次出现null值
List list = new ArrayList();
list.add(null);
list.add(null);
list.add(null);
System.out.println(list);
System.out.println("-----");
//Set集合只允许null值出现一次
Set set = new HashSet();
set.add(null);
set.add(null);
set.add(null);
System.out.println(set);
}
}
- 结论:
- List集合允许多次出现null值
- Set集合只允许null值出现一次
四、Set集合的无序性
package com.set.demo;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class SetTest {
public static void main(String[] args) {
Set<String> set = new HashSet<String>();
set.add("hello");
set.add("java");
set.add("world");
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()) {
String str = iterator.next();
System.out.println(str);
}
}
}
***执行结果:***
java
world
hello
- 按照执行结果改变add顺序:
set.add("java");
set.add("world");
set.add("hello");
***新执行结果:***
java
world
hello
- 由此可知:
- 虽然Set集合是无序的,添加元素的顺序和迭代顺序是不一致的。但是,Set集合在存储元素的时候,是有它自己的一套规则的,它会按照这套规则存储,如果添加元素的顺序刚好符合它存储元素的顺序的话,那么就会出现添加和遍历的顺序一致,但是此时不能说明Set集合是有序的。
五、Set集合的唯一性
- 在上面代码的基础上添加重复元素:
set.add("java");
set.add("world");
set.add("hello");
set.add("world");
set.add("hello");
***执行结果:***
java
world
hello
- 可见Set集合是不允许重复的
- 相关文章:《Java集合框架——Set集合的去重原理》