我们可以在Java中将空元素添加到Set中吗?

Can we add null elements to a Set in Java?

集合是一个不能包含重复元素的集合。它为数学集合抽象建模。

它不允许重复的元素,并且最多允许一个空值。

Set还为equals和hashCode操作的行为增加了更紧密的约定,允许Set实例进行有意义的比较,即使它们的实现类型不同。

实现此接口的类共有三个-

  • HashSet?设置基于哈希表的实现。
  • LinkedHashSet?基于链表的HashSet实现。
  • TreeSet?设置基于树的实现。

Set对象中的空值

根据定义,设置对象不允许重复值,但最多允许一个空值。

HashSet中是否为空值? HashSet对象允许使用null值,但是您只能向其中添加一个null元素。尽管您尝试打印其内容时添加了更多的空值,但它仅显示一个空值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.HashSet;
import java.util.Set;
public class HashSetExample {
 public static void main(String args[]) {
   Set<Integer> hashSet = new HashSet<Integer>();
   //Populating the HashSet
   hashSet.add(1124);
   hashSet.add(3654);
   hashSet.add(7854);
   hashSet.add(9945);
   System.out.println(hashSet);
   //Adding null elements
   hashSet.add(null);
   hashSet.add(null);
   hashSet.add(null);
   System.out.println(hashSet);
 }
}

输出量

1
2
[1124, 3654, 9945, 7854]
[null, 1124, 3654, 9945, 7854]

LinkedHashSet中的空值:与HashSet对象一样,它也允许空值,但是,您只能向其中添加一个空元素。尽管您尝试打印其内容时添加了更多的空值,但它仅显示一个空值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.LinkedHashSet;
import java.util.Set;
public class LinkedHashSetExample {
 public static void main(String args[]) {
   Set<Integer> linkedHashSet = new LinkedHashSet<Integer>();
   //Populating the HashSet
   linkedHashSet.add(1124);
   linkedHashSet.add(3654);
   linkedHashSet.add(7854);
   linkedHashSet.add(9945);
   System.out.println(linkedHashSet);
   //Adding null elements
   linkedHashSet.add(null);
   linkedHashSet.add(null);
   linkedHashSet.add(null);
   System.out.println(linkedHashSet);
 }
}

输出量

1
2
[1124, 3654, 9945, 7854]
[null, 1124, 3654, 9945, 7854]

Null值在TreeSet中? TreeSet对象不允许使用空值,但是,如果尝试添加它们,则将在运行时异常生成。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.Set;
import java.util.TreeSet;
public class TreeSetExample {
 public static void main(String args[]) {
   Set<Integer> treeSet = new TreeSet<Integer>();
   //Populating the HashSet
   treeSet.add(1124);
   treeSet.add(3654);
   treeSet.add(7854);
   treeSet.add(9945);
   System.out.println(treeSet);
   //Adding null elements
   treeSet.add(null);
   treeSet.add(null);
   treeSet.add(null);
   System.out.println(treeSet);
 }
}

运行时异常

1
2
3
4
5
[1124, 3654, 7854, 9945]
Exception in thread"main" java.lang.NullPointerException
 at java.util.TreeMap.put(Unknown Source)
 at java.util.TreeSet.add(Unknown Source)
 at MyPackage.TreeSetExample.main(TreeSetExample.java:16)