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

Java中是否有接受基元类型中的键的KV数据结构?,java,Java,我需要以键值方式存储信息。但是内置的地图界面不能满足我的要求。JavaMap要求引用键和值,而我需要使用原语值作为键 是否有类似地图的数据结构?谢谢你的帮助 需求详情: 我用Java编写的服务器作为监听tcp端口的守护进程运行。当用户第一次接入时,需要以KV方式存储有关用户的详细信息,第二次接入时,用户的详细信息应该能够从KV数据结构中读取 我不能使用用户对象作为密钥,因为断开连接时它将被破坏,并在第二次连接中重建。这两个对象不是相同的参照。出于同样的原因,整数键也不适合我的要求 换句话说,我需

我需要以键值方式存储信息。但是内置的地图界面不能满足我的要求。JavaMap要求引用键和值,而我需要使用原语值作为键

是否有类似地图的数据结构?谢谢你的帮助

需求详情:

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

我不能使用用户对象作为密钥,因为断开连接时它将被破坏,并在第二次连接中重建。这两个对象不是相同的参照。出于同样的原因,整数键也不适合我的要求

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


可以考虑的键有:UUID(long)、id(int)等等。它们都是基元类型。

您要查找的内容称为Hashmap

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

本质上,HashMap将第一个参数作为键,第二个参数作为值,完全按照您的请求。您可以指定任何类型,包括比正常值大的整数的Long,尽管您不能传递原语。不过,这对我来说从来都不是一个问题。

您正在寻找的是所谓的Hashmap

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

本质上,HashMap将第一个参数作为键,第二个参数作为值,完全按照您的请求。您可以指定任何类型,包括比正常值大的整数的Long,尽管您不能传递原语。尽管如此,这对我来说从来都不是问题。

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

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

您仍然可以使用java映射,因为包装器类可用于所有基本类型,并且java支持自动装箱,因此您可以使用
java.util.Map
。前

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

否,集合不支持基元类型,因此您必须为基元类型或数组使用包装类。

否,集合不支持基元类型,因此您必须为基元类型或数组使用包装类。

HashMap类适合使用键值对,但是没有这样的东西可以接受原始类型

我们仍将尝试在映射的上下文中使用基元类型

HashMap<Integer, V> map = new HashMap<>();
map.put(12, someV);
HashMap map=newhashmap();
地图放置(12,someV);
当我们编写
map.put(12,someV)
时,实际上,不能使用原语类型作为类
java.util.map的方法“put”的第一个参数。但在Java中,整数“12”将自动“转换”(自动装箱)到对应的包装类中,在本例中为
integer


这意味着在
HashMap
中实际上有一个类型为
Integer
对象,但是它被反映为
int
HashMap
类可以使用键值对,但是没有接受基元类型的东西

我们仍将尝试在映射的上下文中使用基元类型

HashMap<Integer, V> map = new HashMap<>();
map.put(12, someV);
HashMap map=newhashmap();
地图放置(12,someV);
当我们编写
map.put(12,someV)
时,实际上,不能使用原语类型作为类
java.util.map的方法“put”的第一个参数。但在Java中,整数“12”将自动“转换”(自动装箱)到对应的包装类中,在本例中为
integer


这意味着在
HashMap
中实际上有一个类型为
Integer
对象,但它被反映为
int

我不明白为什么不能简单地将原语类型封装在它相应的非原语类中,并将其用作常规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
Map Map=newhashmap();
整数键=整数。值为(5);
对象测试=新对象();
地图。放置(键,测试);
对象test2=map.get(Integer.valueOf(5));
test.equals(test2);//这将是真的

我不明白为什么不能简单地将基元类型包装到相应的非基元类中,并将其用作常规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
Map Map=newhashmap();
整数键=整数。值为(5);
对象测试=新对象();
地图。放置(键,测试);
对象test2=map.get(Integer.valueOf(5));
test.equals(test2);//这将是真的

其他地方有各种实现,但标准java库中没有。参见示例。

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

您是否尝试在谷歌上搜索“java地图”?谢谢@ChristianKuetbach,我在谷歌上搜索了很长时间,没有找到我需要的任何东西。Quoi关于使用包装器的回答是正确的。与C++不同,java模板只对类进行工作,而不是基元,所以需要一个包装器。在再次阅读问题之后,我说,你还有一个问题,“java中的映射是什么?”但是为什么不能用整型数作为键呢?我无法想象这个问题…@ChristianKuetbach,我想当我使用语句“newinteger(5)”进行输入和获取时,键被创建了两次,并且它们不是相同的引用。你试过谷歌搜索“java地图”吗?谢谢@ChristianKuetbach,我搜索谷歌很久了,没有找到我需要的任何东西。Quoi使用包装器的答案是正确的。与C++不同,java模板只有WO