HashMap为什么要采用数组和链表来实现? Hash表也称为散列表;在计算机上要找到同一个散列值的不同输入是不可能的,那么当HashMap输入相同key值的时候,就没必要将value值存贮到链表上了,直接替换原来的value值不是更好吗?效率是不是也提高了呢?这个问题一直困扰这我,期待大牛们解答……HashMap链表HASH 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 key相同本来就是替换的。等等,“在计算机上要找到同一个散列值的不同输入是不可能的”,谁教你的,以后别跟他玩了 百度百科说的啊?难道我要抛弃百度了?http://baike.baidu.com/view/273836.htm?fromId=1041476 public class Bean { public int hashCode() { return 47; }} 数组不必多言。至于为何用链表,我想问:大哥,凭什么替换啊?!假设你原本想{"KEY": "VALUE", // Hash对应的存储位置"A": "123", // 0"B": "456", // 1"C": "555", // 4"D": "666", // 3"E": "777", // 2"X": "XYZ" // 0}那么,显然,你不希望让Key="X"的Entry冲掉Key="A"的,而是希望他们和平共处吧。所以,对于hash后算出的存储位置,通过链表的方式避免错误。 虽然根据哈希算法的不同,很有可能不会造成冲突,但是反过来讲,这样的数据结构也会造成巨大的内存浪费。因此有限量的Hash表内存结构还是有必要的,在这种状态下,冲突的可能性会大大提高。另外,就和楼上说的一样,完全没冲突的Hash算法,这个在数学上貌似还没严格证明吧,呵呵。 你的意思是通过Hash算法算出的哈希值可能相同,因此在数组存储位置上创建一个链表来存储相同哈希值的数据,是这样的吗? 你的意思是通过Hash算法算出的哈希值可能相同,因此在数组存储位置上创建一个链表来存储相同哈希值的数据,是这样的吗?对,但不一定是hash值一样。重点是通过hash算出的存储位置。假设你数组只有50个位置。可能hash = 1 和 hash = 1234567算出来的位置也是一样的。当然,两个hash一样的key,位置更是一样。 当key 相等 或 equals 的时候本来就是覆盖啊,关键是根据key算出来的hashcode计算数组下标位置, 多个key的hashcode相同的时候会以链表的形式存储。数组内放的是链表的头节点。建议看看源代码吧数组查找遍历快,链表删除,插入快,结合了这两者的有点 在swing中调用excel控件 struts2情况下如何运行普通的servlet 按参数对字符串进行分段分割 java IO文件操作的奇怪问题 怎么生成一个可以双击执行的jar包 几个基础问题,帮忙回答下 关键字:TableCellRenderer TableCellEditor 如何让applet在最初的时候处于不可见状态? 急啊!!!!!! java视频教程 在JNI编程中创建共享库时(.C->.DLL)(vc6.0环境…………多谢高手指教! 求简化代码 java界面
public class Bean {
public int hashCode() {
return 47;
}
}
假设你原本想
{
"KEY": "VALUE", // Hash对应的存储位置
"A": "123", // 0
"B": "456", // 1
"C": "555", // 4
"D": "666", // 3
"E": "777", // 2
"X": "XYZ" // 0
}那么,显然,你不希望让Key="X"的Entry冲掉Key="A"的,而是希望他们和平共处吧。所以,对于hash后算出的存储位置,通过链表的方式避免错误。
虽然根据哈希算法的不同,很有可能不会造成冲突,但是反过来讲,这样的数据结构也会造成巨大的内存浪费。
因此有限量的Hash表内存结构还是有必要的,在这种状态下,冲突的可能性会大大提高。另外,就和楼上说的一样,完全没冲突的Hash算法,这个在数学上貌似还没严格证明吧,呵呵。
对,但不一定是hash值一样。重点是通过hash算出的存储位置。假设你数组只有50个位置。可能hash = 1 和 hash = 1234567算出来的位置也是一样的。当然,两个hash一样的key,位置更是一样。
数组查找遍历快,链表删除,插入快,结合了这两者的有点