A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 廖彬 中级黑马   /  2015-1-12 19:59  /  10699 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

9 个回复

倒序浏览
本帖最后由 Imp_x 于 2015-1-13 15:56 编辑

{:3_60:}{:3_60:}{:3_60:}{:3_60:}{:3_60:}
回复 使用道具 举报
想要重复键值,就不要用map
回复 使用道具 举报
map中的键值是不能重复的
回复 使用道具 举报
map集合中的键必须是唯一的,不能重复。键相同,值覆盖。
回复 使用道具 举报
如果你存的是自定义的对象的话 就行    HashMap只要复写元素hashCode()或者equals()   同理TreeMap 只要复写
compareTo 或者compare方法即可  比如return 1.   但是对于Integer 这样的已经定义好的类   只能通过自定义比较器的方式达到存储相同元素的目的。    以上个人见解:)
回复 使用道具 举报
廖彬 中级黑马 2015-1-13 14:54:08
7#
outsider1020 发表于 2015-1-13 09:07
map中的键值是不能重复的

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

那是HashSet吧
回复 使用道具 举报

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