62,614
社区成员
发帖
与我相关
我的任务
分享
Map<String,String> map=new HashMap<>();
map.put("姓名","张三");
map.put("姓名","李四");
System.out.println(map.get("姓名"));
按照您的意思,这种情况下是不是为了解决hash冲突,然后张三,李四都存储在了这个linkList中了呢,如果是,那要怎么得到张三呢?[/quote]
比如说 table[] 表长为8, table的下标就是 0-7 , 具体map存在哪个table的下标中,是先求得该map值的hash值,然后通过该hash值对8求余数,
余数会得到0-7 ,8个结果。余数相同的就依次存入对应的table下标的Linklist中。
Map<String,String> map=new HashMap<>();
map.put("姓名","张三");
map.put("姓名","李四");
System.out.println(map.get("姓名"));
按照您的意思,这种情况下是不是为了解决hash冲突,然后张三,李四都存储在了这个linkList中了呢,如果是,那要怎么得到张三呢?
HashMap<String,Integer> map=new HashMap<>();
// 以下这些key的哈希值全部都相同,也就是所谓的哈希碰撞的情况
String[] keys = {"AaAaAaAa", "AaAaBBBB", "AaAaAaBB", "AaAaBBAa",
"BBBBAaAa", "BBBBBBBB", "BBBBAaBB", "BBBBBBAa",
"AaBBAaAa", "AaBBBBBB", "AaBBAaBB", "AaBBBBAa",
"BBAaAaAa", "BBAaBBBB", "BBAaAaBB", "BBAaBBAa",};
for(int i=0;i<keys.length;i++){
String key = keys[i];
System.out.println(key+":"+key.hashCode());
map.put(key,i);
}
System.out.println(map);
Map<String,String> map=new HashMap<>();
map.put("姓名","张三");
map.put("姓名","李四");
System.out.println(map.get("姓名"));
按照您的意思,这种情况下是不是为了解决hash冲突,然后张三,李四都存储在了这个linkList中了呢,如果是,那要怎么得到张三呢?[/quote]
完全不对,你还是没理解HashMap,在执行 map.put("姓名","李四"); 之后,张三已经被抛弃了,数组里已经没有张三了。
HashMap,会先计算“姓名”.hashCode,然后去Map里找数组,找到数组后,遍历数组,找“姓名”,如果存在,就覆盖,不存在,就在数组的最后一个位置插入“姓名:张三”