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

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

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

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

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

  • HashSet-基于哈希表设置实现。

  • LinkedHashSet-基于链表的HashSet实现。

  • TreeSet-基于树设置实现。

Set对象中的空值

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

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

示例

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

输出结果

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

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

示例

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

输出结果

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

TreeSet中的空值-TreeSet对象不允许空值,但是,如果尝试添加空值,则会在运行时异常生成。

示例

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

运行时异常

[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)