求助关于Java中hashtable类的问题

马小李 2014-10-22 10:42:21
Java中的hashtable类在API中的描述如下:
此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。

为了成功地在哈希表中存储和获取对象,用作键的对象必须实现 hashCode 方法和 equals 方法。

Hashtable 的实例有两个参数影响其性能:初始容量 和加载因子。容量 是哈希表中桶 的数量,初始容量 就是哈希表创建时的容量。注意,哈希表的状态为 open:在发生“哈希冲突”的情况下,单个桶会存储多个条目,这些条目必须按顺序搜索。加载因子 是对哈希表在其容量自动增加之前可以达到多满的一个尺度。初始容量和加载因子这两个参数只是对该实现的提示。关于何时以及是否调用 rehash 方法的具体细节则依赖于该实现。
为了确认不是翻译问题,其英文版如下:
This class implements a hash table, which maps keys to values. Any non-null object can be used as a key or as a value.

To successfully store and retrieve objects from a hashtable, the objects used as keys must implement the hashCode method and the equals method.

An instance of Hashtable has two parameters that affect its performance: initial capacity and load factor. The capacity is the number of buckets in the hash table, and the initial capacity is simply the capacity at the time the hash table is created. Note that the hash table is open: in the case of a "hash collision", a single bucket stores multiple entries, which must be searched sequentially. The load factor is a measure of how full the hash table is allowed to get before its capacity is automatically increased. The initial capacity and load factor parameters are merely hints to the implementation. The exact details as to when and whether the rehash method is invoked are implementation-dependent.
其解决冲突的方式的开散列,也就是一个关键值下可以放置多个值,可是:
V put(K key, V value)
将指定 key 映射到此哈希表中的指定 value。
其put函数是用覆盖的方式存放数值,这是为什么呢?有高手给解释下吧
...全文
186 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
马小李 2014-10-22
  • 打赏
  • 举报
回复
引用 4 楼 whos2002110 的回复:
[quote=引用 2 楼 mxlmhgzw 的回复:] [quote=引用 1 楼 whos2002110 的回复:] 覆盖是key的hashCode 经过散列到对应下标时,且在这个链表中存在oldkey与之equals 才会在oldKey的那个Entity中覆盖value。 没有与之equals的oldKey时,采用头插法保存最新的key-value pair
我大概懂了 是不是这个开散列的方式并不是我所想的以key的内容在数组中搜索,而是以key的hashcode的内容在数组中搜索,然后不同的key可能有相同的hashcode这样会导致冲突才会在下面建立链表以供线性搜索,而对于key相同的不同value只存储最新的条目 是不是呢? 希望帮忙详细解答下,真心感谢了[/quote] 对的,最好自己对着源代码一点点看, Map里面put方法还是比较简单的。 再可以debug,看它里面维护的Entry[] tables;值是怎么存的。[/quote] 嗯 谢谢指导了 我刚看源码看得不是很懂 这下懂了,完全没想到不同的key有相同的hashcode,这样散列的效果有点低啊 再次感谢指点 谢谢
马小李 2014-10-22
  • 打赏
  • 举报
回复
引用 3 楼 loneking2001 的回复:
一个 key 不会放多个 value,应该是一个 hash 可能放多个 key-value。这时虽然 hash 值碰撞了,但 key 还是不一样的。
嗯 其实我就没弄明白 或者叫没想到 竟然不同的key可能有相同的hash值 这真是惊呆了
whos2002110 2014-10-22
  • 打赏
  • 举报
回复
引用 2 楼 mxlmhgzw 的回复:
[quote=引用 1 楼 whos2002110 的回复:] 覆盖是key的hashCode 经过散列到对应下标时,且在这个链表中存在oldkey与之equals 才会在oldKey的那个Entity中覆盖value。 没有与之equals的oldKey时,采用头插法保存最新的key-value pair
我大概懂了 是不是这个开散列的方式并不是我所想的以key的内容在数组中搜索,而是以key的hashcode的内容在数组中搜索,然后不同的key可能有相同的hashcode这样会导致冲突才会在下面建立链表以供线性搜索,而对于key相同的不同value只存储最新的条目 是不是呢? 希望帮忙详细解答下,真心感谢了[/quote] 对的,最好自己对着源代码一点点看, Map里面put方法还是比较简单的。 再可以debug,看它里面维护的Entry[] tables;值是怎么存的。
rayw0ng 2014-10-22
  • 打赏
  • 举报
回复
一个 key 不会放多个 value,应该是一个 hash 可能放多个 key-value。这时虽然 hash 值碰撞了,但 key 还是不一样的。
马小李 2014-10-22
  • 打赏
  • 举报
回复
引用 1 楼 whos2002110 的回复:
覆盖是key的hashCode 经过散列到对应下标时,且在这个链表中存在oldkey与之equals 才会在oldKey的那个Entity中覆盖value。 没有与之equals的oldKey时,采用头插法保存最新的key-value pair
我大概懂了 是不是这个开散列的方式并不是我所想的以key的内容在数组中搜索,而是以key的hashcode的内容在数组中搜索,然后不同的key可能有相同的hashcode这样会导致冲突才会在下面建立链表以供线性搜索,而对于key相同的不同value只存储最新的条目 是不是呢? 希望帮忙详细解答下,真心感谢了
whos2002110 2014-10-22
  • 打赏
  • 举报
回复
覆盖是key的hashCode 经过散列到对应下标时,且在这个链表中存在oldkey与之equals 才会在oldKey的那个Entity中覆盖value。 没有与之equals的oldKey时,采用头插法保存最新的key-value pair
内容概要:本文围绕基于粒子群算法(PSO)的风电与水电(抽水蓄能)联合优化调度问题展开研究,旨在通过智能优化算法实现可再生能源的高效利用与电力系统的经济稳定运行。文系统阐述了粒子群算法的核心原理及其在电力调度的适用性,构建了综合考虑风电出力不确定性、抽水蓄能电站调节能力及系统运行约束的联合优化调度模型。采用Matlab进行算法编程与仿真求解,验证了该方法在降低系统综合运行成本、提升新能源消纳水平、增强电网调峰调频能力等方面的优越性能。研究进一步设计了多种对比场景,分析不同调度策略下的系统表现,充分展示了所提模型在应对复杂运行条件时的鲁棒性与实用价值。; 适合人群:具备一定电力系统分析基础和Matlab编程能力的研究生、科研人员,以及从事新能源并网调度、电力系统规划与运行等相关领域的工程师; 使用场景及目标:①应用于风电场与抽水蓄能电站的协同优化调度决策支持;②为高比例可再生能源接入的电力系统提供经济可靠的低碳调度方案;③服务于高校及科研院所关于智能优化算法在能源系统应用的教学与科研实验; 阅读建议:建议读者结合提供的Matlab代码深入理解算法实现细节与模型构建逻辑,重点关注目标函数设计、约束条件处理及参数设置对优化结果的影响,并通过复现仿真结果来掌握粒子群算法解决复杂非线性调度问题的关键技术要点。

67,535

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧