gpt4 book ai didi

java - 当我不关心 Value 中存储的内容时,我应该如何创建 Hashtable

转载 作者:行者123 更新时间:2023-11-29 05:18:28 25 4
gpt4 key购买 nike

我想对整数数组进行操作,我可以使用hashtable 来解决这个问题。我想将数组的元素存储为 Key 但对于 Value 我真的不在乎那里会存储什么。在这种情况下,我应该如何创建哈希表?我的方法只是将每个元素的值设置为 0,如下所示:

    Hashtable<Integer, Integer> ht = new Hashtable<Integer, Integer>();
for (int i = 0; i < arr.length; i++) {
ht.put(arr[i], 0);
}

在这种情况下我应该做什么有什么约定吗?例如,将 Value 设置为 Boolean 并为所有插入的元素分别设置 true 是否更好?再一次,对我来说,Value 中存储什么并不重要。我只想知道在这种情况下最好的方法是什么。

最佳答案

正如 rolfl 已经指出的那样,Hashtable 是一种在 Collections Framework 之前就已经存在的数据结构。被介绍。它可能被视为 Collections.synchronizedMap 的替代方案,但后者提供了一些额外的灵 active 。

因此一般建议可以在新代码中使用Hashtable,因为现在有更好的选择。


最重要的是,无论您是否使用Hashtable:您都不应该知道您正在使用它。特别是,您应该永远不要将您的变量声明为Hashtable,而始终是Map:

// Don't do this!
Hashtable<Integer, Integer> ht = new Hashtable<Integer, Integer>();

// Do this instead (if you don't need synchronized access)
Map<Integer, Integer> ht = new HashMap<Integer, Integer>();

// Or this, if you need synchronized access:
Map<Integer, Integer> ht =
Collections.synchronizedMap(new HashMap<Integer, Integer>());

另见 What does it mean to “program to an interface”?


也就是说:看起来您根本不需要MapHashtable。从描述来看,听起来您只是想知道 map 中是否包含特定键。这可以以不同的方式建模。但最有可能的是,这意味着您应该使用 Set 而不是 Map

Set<Integer> set = new HashSet<Integer>();
for (int i = 0; i < arr.length; i++) {
set.add(arr[i]);
}

// To check whether an integer is contained in the set:
if (set.contains(42)) {
...
}

关于java - 当我不关心 Value 中存储的内容时,我应该如何创建 Hashtable<Key, Value>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25684070/

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