Java 的 Set 中可以添加 null 元素吗?


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

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

Set 还对 equals 和 hashCode 操作的行为增加了更严格的约定,允许即使实现类型不同也能有意义地比较 Set 实例。

有三个类实现了这个接口:

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

Set 对象中的 null 值

根据定义,Set 对象不允许重复值,但它最多允许一个 null 值。

HashSet 中的 null 值 − HashSet 对象允许 null 值,但是你只能向其中添加一个 null 元素。即使你添加了多个 null 值,如果尝试打印其内容,它也只会显示一个 null。

示例

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 中的 null 值:与 HashSet 对象一样,它也允许 null 值,但是你只能向其中添加一个 null 元素。即使你添加了多个 null 值,如果尝试打印其内容,它也只会显示一个 null。

示例

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 中的 null 值 − TreeSet 对象不允许 null 值。如果你尝试添加它们,将会抛出运行时异常。

示例

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)

更新于:2019年8月7日

13K+ 浏览量

启动你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.