Java中是否有接受基本类型键的KV数据结构?

时间:2012-11-22 10:37:04

标签: java

我需要以Key Value方式存储信息。但内置的Map界面无法满足我的要求。 Java Map需要引用Key和Values,而我需要使用原始值作为键。

有没有像Map这样的数据结构?谢谢你的帮助!

要求明细:

我用Java编写的服务器作为监听tcp端口的守护进程运行。当用户首次连接时,有关用户的详细信息需要以KV方式存储,并且第二次用户连接时,他的详细信息应该能够从KV数据结构中读取。

我不能将用户对象用作密钥,因为它会在断开连接时被破坏,并在第二个连接中重建。这两个对象的引用不一样。由于同样的原因,整数键不符合我的要求。

换句话说,我需要使用值作为键,而不是引用。

可以考虑键是:UUID(长),id(int)等等。它们都是原始类型。

6 个答案:

答案 0 :(得分:2)

仍然可以使用java Map,因为包装类可用于所有原始类型,java支持自动装箱,因此您可以使用java.util.Map。前 -

Map<Long,Integer> map = new HashMap<Long,Integer>();
long uuid=10; int i= 10;
map.put(uuid,i);

答案 1 :(得分:1)

不,集合不支持基本类型,因此必须使用基本类型或数组的包装类。

答案 2 :(得分:1)

我不明白为什么你不能简单地将原始类型包装在相应的非原始类中,并将其用作常规java映射中的键。

Map<Integer, Object> map = new HashMap<Integer, Object>();
Integer key = Integer.valueOf(5);
Object test = new Object();
map.put(key, test);
Object test2 = map.get(Integer.valueOf(5));

test.equals(test2); // will be true

答案 3 :(得分:0)

您要找的是一个Hashmap。

Hashmap<Long, Integer> dict=new HashMap<Long, Integer>();
dict.put(24,10);
dict.put(13,63);
dict.get(13); // Equals 63

基本上,HashMap将第一个参数作为键,第二个作为值,完全按照您的请求。尽管您无法传递基元,但您可以指定任何类型,包括比常规更大的整数。不过,这对我来说一直不是问题。

答案 4 :(得分:0)

HashMap类适合使用键值对,但没有接受基本类型的东西。

我们仍然会尝试在Map的上下文中使用原始类型。

HashMap<Integer, V> map = new HashMap<>();
map.put(12, someV);

当我们编写map.put(12, someV)时,实际上,不能使用基本类型作为类java.util.Map的方法'put'的第一个参数。但在Java中,整数'12'将自动'转换'自动装箱)到相应的包装类中,在本例中为Integer。< / p>

这意味着Integer中实际上存在{strong> {类型对象,但反映为{{1} }}

答案 5 :(得分:0)

其他地方存在各种实现,但标准java库中没有。请参阅示例LongHashMap