黑马程序员技术交流社区

标题: 在map集合中如何存储相同的键值 [打印本页]

作者: 廖彬    时间: 2015-1-12 19:59
标题: 在map集合中如何存储相同的键值
在map集合中如何存储相同的键值 比如map m 中存储 m.put("5", "6"), m.put("5", "56"), 不管用TreeMap或是hashMap最后输出来的值都是5=56,最后添加的value 56把value 6给覆盖了,我想重写hashMap中的put的方法,可是写不出来,有没有人遇到过同样的问题

作者: Imp_x    时间: 2015-1-12 20:10
本帖最后由 Imp_x 于 2015-1-13 15:56 编辑

{:3_60:}{:3_60:}{:3_60:}{:3_60:}{:3_60:}
作者: 随影    时间: 2015-1-12 22:37
想要重复键值,就不要用map
作者: outsider1020    时间: 2015-1-13 09:07
map中的键值是不能重复的
作者: 时间来过    时间: 2015-1-13 09:56
map集合中的键必须是唯一的,不能重复。键相同,值覆盖。
作者: 有陷阱快跑丶    时间: 2015-1-13 10:53
如果你存的是自定义的对象的话 就行    HashMap只要复写元素hashCode()或者equals()   同理TreeMap 只要复写
compareTo 或者compare方法即可  比如return 1.   但是对于Integer 这样的已经定义好的类   只能通过自定义比较器的方式达到存储相同元素的目的。    以上个人见解:)
作者: 廖彬    时间: 2015-1-13 14:54
outsider1020 发表于 2015-1-13 09:07
map中的键值是不能重复的

可以的,这个类 IdentityHashMap<K,V>可以存储相同键值对
作者: 邓士林    时间: 2015-1-13 15:36
有陷阱快跑丶 发表于 2015-1-13 10:53
如果你存的是自定义的对象的话 就行    HashMap只要复写元素hashCode()或者equals()   同理TreeMap 只要复 ...

那是HashSet吧
作者: 有陷阱快跑丶    时间: 2015-1-13 15:39
邓士林 发表于 2015-1-13 15:36
那是HashSet吧

Set 底层就是用的map
作者: chudaming213    时间: 2015-1-13 16:14
我刚才看了一下,在hashmap中没有compareTo方法,但是有equals方法,为了保证元素的唯一性在调用put方法时,一定会调用equals方法。如果你能想办法重写其中的equals方法,使同一个键对应的hash值不一样,也就是键1.equals(键1)=false就能存储进去了。
对于treemap要保证向里面存的数据要有可比性,在调用put方法是,此方法会调用键的compareto方法,或者调用定义treemap时作为参数传进来的比较器。所以要想让一个键对应两个值,只有重写键的compareto方法或者传进个能使相同键对比结果为false的比较器。
另外,自我感觉map中的键与值更像是函数中的自变量与因变量之间的关系。map集合的存在主要想保证键与值的对应关系。如果像楼主说的那样就没有什么价值了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2