gpt4 book ai didi

java - Java 中哈希表的单独链接

转载 作者:行者123 更新时间:2023-11-29 06:34:23 26 4
gpt4 key购买 nike

基于以下代码片段:

  Hashtable balance = new Hashtable();
Enumeration names;
String str;
double bal;

balance.put("Zara", new Double(3434.34)); //first entry for Zara
balance.put("Mahnaz", new Double(123.22));
balance.put("Zara", new Double(1378.00)); //second entry for Zara
balance.put("Daisy", new Double(99.22));
balance.put("Qadir", new Double(-19.08));

System.out.println(balance.entrySet());

.

Output : [Qadir=-19.08, Mahnaz=123.22, Daisy=99.22, Zara=1378.0]
  1. 为什么这里没有链接?当我以 Zara 作为键重新输入时,旧值将被覆盖。我希望它被添加到链接列表的末尾 Zara".hashcode() index.
  2. Java 是否仅将单独的链接用于冲突处理?
  3. 如果我不能使用链接(正如我在上面尝试过的那样),请建议一个常用的方法。

最佳答案

Does Java use separate chaining only for collision handling?

是的。在 Hashtable(或 HashMap,这是您可能应该使用的 - 以及泛型)中的每个键只能有一个条目。它是键/值映射,而不是键/多值映射。在哈希表的上下文中,术语“冲突”通常用于两个不相等 键具有相同哈希码的情况。它们仍然需要被视为不同的键,因此实现必须解决这个问题。那不是你所处的情况。

听起来您可能想要一张多 map ,例如 Guava 中的其中一张。 .然后,您可以向多重映射询问与特定键关联的所有值。

编辑:如果你想构建你自己的多图,你会有类似的东西:

// Warning: completely untested
public final class Multimap<K, V> {
private final Map<K, List<V>> map = new HashMap<>();

public void add(K key, V value) {
List<V> list = map.get(key);
if (list == null) {
list = new ArrayList();
map.put(key, list);
}
list.add(value);
}

public Iterable<V> getValues(K key) {
List<V> list = map.get(key);
return list == null ? Collections.<V>emptyList()
: Collections.unmodifiableList(list);
}
}

关于java - Java 中哈希表的单独链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24349379/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com