我需要以Key Value方式存储信息。但内置的Map界面无法满足我的要求。 Java Map需要引用Key和Values,而我需要使用原始值作为键。
有没有像Map这样的数据结构?谢谢你的帮助!
要求明细:
我用Java编写的服务器作为监听tcp端口的守护进程运行。当用户首次连接时,有关用户的详细信息需要以KV方式存储,并且第二次用户连接时,他的详细信息应该能够从KV数据结构中读取。
我不能将用户对象用作密钥,因为它会在断开连接时被破坏,并在第二个连接中重建。这两个对象的引用不一样。由于同样的原因,整数键不符合我的要求。
换句话说,我需要使用值作为键,而不是引用。
可以考虑键是:UUID(长),id(int)等等。它们都是原始类型。
答案 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。