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)
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP