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

java 8object oriented programmingprogramming更新于 2024/10/13 15:40:00

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

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

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

有三个类实现此接口 −

  • HashSet − 基于哈希表的 Set 实现。
  • LinkedHashSet − 基于链接列表的 HashSet 实现。
  • TreeSet −基于树的集合实现。

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>();
      //填充 HashSet
      hashSet.add(1124);
      hashSet.add(3654);
      hashSet.add(7854);
      hashSet.add(9945);
      System.out.println(hashSet);
      //添加空元素
      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>();
      //填充 HashSet
      linkedHashSet.add(1124);
      linkedHashSet.add(3654);
      linkedHashSet.add(7854);
      linkedHashSet.add(9945);
      System.out.println(linkedHashSet);
      //添加空元素
      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>();
      //填充 HashSet
      treeSet.add(1124);
      treeSet.add(3654);
      treeSet.add(7854);
      treeSet.add(9945);
      System.out.println(treeSet);
      //添加空元素
      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)

相关文章