黑马程序员技术交流社区

标题: 关于Map的Key重复问题 [打印本页]

作者: 张晋瑜    时间: 2013-2-17 16:15
标题: 关于Map的Key重复问题
本帖最后由 zhangjinyu1991 于 2013-2-20 13:02 编辑

是这样子的,Map中的Key-value对不是不可以重复的嘛,那假如其中已经有了一个(“apple”,4500),我再map.add("apple",5400),那结果会怎么阳呢?
作者: 李培根    时间: 2013-2-17 16:26
键相同值会覆盖,
如果有了(“apple”,4500),再map.add("apple",5400),
相当于只存了map.add("apple",5400),


int[] arr = new int[3];
arr[0] = 3;
arr[0] = 4;

最终存的是这个4
作者: 张晋瑜    时间: 2013-2-17 16:31
李培根 发表于 2013-2-17 16:26
键相同值会覆盖,
如果有了(“apple”,4500),再map.add("apple",5400),
相当于只存了map.add("apple",54 ...

那是不是就是说之前的那个数据摸除了呢?
是不是Map中不同Key的value是可以相同的?
作者: 铿锵科技    时间: 2013-2-17 22:57
自己测试吖

作者: 胥文    时间: 2013-2-17 23:07
首先map集合里面没有add()这个方法
该集合添加键值对用的是put(key,value);
将指定的值与此映射中的指定键关联(可选操作)。如果此映射以前包含一个该键的映射关系,则用指定值替换旧值
作者: 逍林游    时间: 2013-2-18 09:30
不就是修改对应key的value嘛
作者: 罗海清    时间: 2013-2-18 10:17
结果是这样的,
会返回4500这个值,
但是存入的是覆盖后的5400,用get(apple)时,查到的是5400
作者: 陈科宇    时间: 2013-2-18 14:08
     朋友你首先搞清楚,Map是根据什么来检测重复。它有一套自己的准则的。它设计的原意是不希望Key重复的,Key译为关键字,用于唯一标识一个Map对象,你如果存放的Key对象因为自己的类设计不当而出现数据混乱,Map就不能正确访问元素。就HashMap和HashTable而言,Key类设计的原则都是合理地重写equals方法和hashCode方法。就你存的例子而言,map.add("apple",4500),我假定你没有存入这个对象。当你再存入map.add("apple",4500)时,HashMap就会用equals方法检测到你已经存过一个“apple”的key,那么你存入就不会成功。
Key可以是各种各样的对象,但最重要的是你的equals方法和hashCode方法设计一致。简单地说,equals方法返回true,hashCode方法返回true,equals方法返回false,后者也返回false。




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