gpt4 book ai didi

java - HashMap 中的 void 类作为 Value 对象

转载 作者:行者123 更新时间:2023-12-01 08:00:14 26 4
gpt4 key购买 nike

我知道 HasMap 是一个键值对,但我想要一个只有键(无值)的 HashMap

我想在我的复杂方法中放入下面的java片段(即HashMap仅包含键并且没有与这些键关联的值)。我的要求是,我正在处理重复记录的 List ,并且在比较过程中,我只在 HasMap 中保留一个标识符值(来自一组重复项),我可以稍后比较系统是否已处理。

这是代码片段(由于 Void 类不可实例化,因此出现编译时错误)。

Map<Integer,Void> map=new HashMap<Integer, Void>();

//Some Logic goes here

map.put("ss",new Void());

欢迎任何有关仅 HasMap 没有值的键的建议/帮助。

最佳答案

通常情况下,您会使用 Set 来解决此类问题,因为根本不使用值时无需使用 Key-Value 结构。

正确的解决方案

    Set<String> uniqueValues = new HashSet<String>();
uniqueValues.add( "a" );
uniqueValues.add( "a" );
assert uniqueValues.size() == 1;

请注意,这只是为了完整性,我总是会使用一个 Set 来满足您的要求,其余的更多的是为了娱乐/学习/迷惑人们:

由于 Void 有一个私有(private)构造函数,因此您无法使用 new 关键字创建实例。

但是,至少有两种可能性可以将某些内容放入您的 map 中。解决方案一是添加 null 作为值。因为无论如何你都不需要它。第二个将使用反射来忽略 Void 类的私有(private)构造函数。

黑客解决方案

    Map<String, Void> map = new HashMap<String,Void>();

Constructor<Void> constructor= (Constructor<Void>) Void.class.getDeclaredConstructors()[0];
constructor.setAccessible(true);
Void voidObj = constructor.newInstance();

map.put( "a", voidObj );
map.put( "a", voidObj );
assert map.size() == 1;

关于java - HashMap 中的 void 类作为 Value 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25889698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com