在 Java 中,Set 是否可以存储 null,取决于具体使用的是哪种 Set 实现类。总体情况如下:
null 的支持null 的 SetHashSet
nullSet<String> set = new HashSet<>();
set.add(null); // OK
set.add(null); // 不会重复添加
LinkedHashSet
nullnull 的 SetTreeSet
nullComparator,而 null 无法比较Set<String> set = new TreeSet<>();
set.add(null); // 抛出 NullPointerException
ConcurrentHashMap.KeySetView(如 ConcurrentHashMap.newKeySet())
nullSet<String> set = ConcurrentHashMap.newKeySet();
set.add(null); // NullPointerException
null?HashSet / LinkedHashSet
null 有固定的哈希值(0),可以特殊处理TreeSet
null.compareTo(...) 会抛异常线程安全集合(如 ConcurrentHashMap)
null,避免歧义(如 map.get(key) == null 无法区分“不存在”还是“值为 null”)| Set 实现类 | 是否允许 null |
|---|---|
| HashSet | ✅ 允许(1 个) |
| LinkedHashSet | ✅ 允许(1 个) |
| TreeSet | ❌ 不允许 |
| EnumSet | ❌ 不允许 |
| ConcurrentHashMap.newKeySet() | ❌ 不允许 |
null,优先使用 HashSetnull,或自定义 Comparator 处理 null如果你有具体使用场景(如并发、排序、去重),我可以帮你选最合适的 Set。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。