java中,map集合里面,一个key对应value可以,一个key对应多个value也行,但是多个key可以对应同一个value

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中,map集合里面,一个key对应value可以,一个key对应多个value也行,但是多个key可以对应同一个value相关的知识,希望对你有一定的参考价值。

如果多个key可以同一个value的话,在代码中怎么能够体现,让多个key映射到同一个value上面,如果采用多map的话,查询的效率有没有影响?有没有必要让多个key映射到一个value上面?

参考技术A 我想说一句,一个key可以对应多个value?
key是键,存在栈里的,存的是值在堆的地址,value是值,存在堆里,存的是哈希码。
JAVA中的map应该是一对一吧。追问

那如果多个不同的key对应相同的value时,我们该怎么处理呢?当我把这些键值对存了过后不需要改变,有没有什么简便的方法存储来节约空间?

追答

如果是同一个MAP的话,其实在堆上只有一个value,在栈上的不同key存的是相同的地址(即都是指向同一个value)你运行下一下代码 看看 打印的HashCode是不是一样的嘛:
public static void main(String[] args)

Map map = new HashMap();

map.put("北京","中国");
map.put("上海","中国");
map.put("四川","中国");
map.put("重庆","中国");

for(String str : map.keySet())
System.out.println("value:" + map.get(str) + "--HashCode:" + map.get(str).hashCode());


本回答被提问者采纳
参考技术B 一个key对应多个value也行? 这个不可以!

你后面提的那些问题。。没法解答,就好像问:有没有必要计算2+3?
那如果你业务中就要求这个值,那肯定要计算的。。业务上没有,你聊这个都没有意义。。

Map<String,String> map = new HashMap<String,String>();
map.put("123","abc");
map.put("234","abc");
这样就是2个key对应一个value的追问

我知道,我目前的情况就是这一种,就是说在代码方面有没有什么简便的实现使的多个key对应一个value,那样不是节约存储空间吗

追答

一个map可以做到,你干嘛要用多个?

追问

就是说这个地方不是看着value有重复的吗,有没有办法将多个key放在一块,映射到一个value上

追答

你想的太多了,map就是这么用的。
不懂为什么就看看他源代码。

参考技术C map就是键值对 一对一 ....没有一对多这么一说

不过如果是多个key对应一个value 修改其中一个value的话所有value的值都改变
可以把value设定成同一个对象的引用就好了追问

如何将一个value设定为同一个对象的引用呢
map.put("123","abc");
map.put("234","abc");

写代码的时候应该还是这个样子的吧,有什么简便的写法吗

参考技术D Object obj=new Object();
map.put("1",obj);
map.put("2",obj);

Java中Map和Map<key,value>的区别。

本人新手,请指点。 什么时候该用哪一个,,两者的关系等,请高手明示。

Map<key,value>是Map的一个泛型形式,俩个Map之间实际上是一个东西,但是用法却有点不一样


Map:里面存放的是键值对集合,键值对的类型可以是任意封装类型

例:

Map map=new HashMap();
//以下的俩种使用方式都是对的
map.put("a",1);
map.put(11,"abc");

Map<key,value>:里面存放的也是键值对集合,但是类型只能是<>中指定的类型

例:

Map<String,Integer> map=new HashMap<String,Integer>();
//正确使用方式
map.put("a",1);
//错误使用方式,会导致无法通过编译
map.put(11,"abc");

参考技术A 其实前面的Map相当于Map<Object,Object>.,这个是指装入的键是对象类型,装入的值是对象类型。后面的Map<key,value>只是说明Map装入的是键值对。 参考技术B <>里面的内容代表范式 比如 Map<String,int> 就表示这个 map 的key 是String 类型 value 是 int 类型 就是 强制 规定你 map 里面的类型. 代码规范 参考技术C 哥 这两个是一样的 有区别么 就名字不同

以上是关于java中,map集合里面,一个key对应value可以,一个key对应多个value也行,但是多个key可以对应同一个value的主要内容,如果未能解决你的问题,请参考以下文章

Map集合

java map表里,key值能否映射到多个Value?

java_Map集合

Java的Map集合中多个不同的key可以映射到同一个value吗?

java Map接口

java之map集合