我正在尝试使用Java的Junit Test。我的目标是将哈希表创建为
unsafeCoerce
接下来,我想首先仅添加密钥。之后,当我有值时,将其添加到哈希表中的键中。
示例
Hashtable< String , Hashtable<String,String> > student =
new Hashtable<String, Hashtable<String, String>>();
我尝试使用null,但是在测试过程中我得到了
student.put("student1",null) ;
不可能吗?关于仅添加没有价值的钥匙的任何想法吗?
答案 0 :(得分:2)
是否可以在哈希表Java中添加没有值的键?
简短答案:否
为什么?
因为
会抛出异常/**
* @ORM\Entity
* @Gedmo\SoftDeleteable(fieldName="deletedAt", hardDelete=false)
*/
class Folder extends Catalogue implements ParentCatalogueAware, ChildCatalogueAware
{
并且在相同的源代码中具有验证
* @exception NullPointerException if the key or value is
* <code>null</code>
您可以改用地图。
答案 1 :(得分:1)
HashTable是较旧的实现,而HashMap是具有更多功能的高级版本。您不能在其上调用.equals()或.hashCode(),因为null不是对象。
HashMap是单线程应用程序的更好替代,或者由于同步会引入性能影响,因此不需要同步。如果需要Threadsafe选项,也可以使用ConcurrentHashMap
答案 2 :(得分:1)
The documentation说您不能:
将指定的键映射到此哈希表中的指定值。 键和值都不能为空。
如果需要密钥,最好的办法是使用一个空的HashTable
作为值:
student.put("student1", new Hashtable<>());
答案 3 :(得分:0)
在大多数情况下,您无需担心将null
放入HashMap中。您可以检查通过keySet()
分配了哪些键,并将其他所有内容都视为null
(因为从未分配过)。
但是,您对我的问题表明,您需要区分三种状态:键-值对,从未分配值的键和明确分配了null
的键值。
由于默认的HashMap
不支持此行为,因此您可以实现自己的实现Map
接口的类。它基本上只包装HashMap
,但有一些重要的例外情况:
null
的值时,会将键放入“ {NullKeys””的Set
中,而不是HashMap
中。Set
中。如果是,请返回null
,否则请查看HashMap
。有一些特殊情况(用null
覆盖现有值等),但这是基本策略。
(除了在非常特殊的情况下,我不确定这是否是一个有用的类,但是它是否满足您的要求。)