在 Java 中创建哈希表(或关联数组...)最直接的方法是什么?我的 google-fu 已经出现了几个例子,但是有一个标准的方法来做到这一点吗?

有没有一种方法可以用键->值对列表填充表,而无需为每对对象单独调用 add 方法?

有帮助吗?

解决方案

Map map = new HashMap();
Hashtable ht = new Hashtable();

这两个类都可以从 java.util 包中找到。2者的区别解释如下 jGuru 常见问题解答入口.

其他提示

您可以使用双括号来设置数据。您仍然可以调用 add 或 put,但它不那么难看:

private static final Hashtable<String,Integer> MYHASH = new Hashtable<String,Integer>() {{
    put("foo",      1);
    put("bar",      256);
    put("data",     3);
    put("moredata", 27);
    put("hello",    32);
    put("world",    65536);
 }};

另外不要忘记,Map 和 Hashtable 在 Java 5 及更高版本中都是通用的(就像 Java 中的任何其他类一样) 馆藏框架).

Map<String, Integer> numbers = new HashMap<String, Integer>();
numbers.put("one", 1);
numbers.put("two", 2);
numbers.put("three", 3);

Integer one = numbers.get("one");
Assert.assertEquals(1, one);
import java.util.HashMap;

Map map = new HashMap();

什么 埃德蒙 说。

至于不总是调用 .add ,不,不是惯用的。如果你真的愿意的话,你可以采取各种技巧(将其存储在数组中然后循环),但我不会推荐它。

有没有一种方法可以用键->值对列表填充表,而无需为每对对象单独调用 add 方法?

您的问题的一个问题是您一开始就没有提到您的数据是什么形式。如果您的配对列表恰好是 Map.Entry 对象的列表,那么这将非常简单。

为了摆脱这个问题,有一个名为 java.util.Properties 的(备受诟病的)类,它是 Hashtable 的扩展。它只需要字符串键和值,并允许您使用文件或流加载和存储数据。它读写的文件格式如下:

key1=value1
key2=value2

我不知道这是否是您正在寻找的,但在某些情况下这可能很有用。

值得注意的是,Java 的哈希函数并不是最优的。如果您想要减少冲突并几乎完全消除约 50% 容量的重新哈希,我会使用 Buz 哈希算法 布兹哈希

Java 的哈希算法较弱的原因最明显的是它对字符串进行哈希处理的方式。

"a".hash() 给你 ASCII 表示 "a" - 97, , 所以 "b" 将会 98. 。散列的全部目的是分配一个任意且“尽可能随机”的数字。

如果您需要一个快速而脏的哈希表,请务必使用 java.util. 。如果您正在寻找更强大、更具可扩展性的东西,我会考虑实现您自己的。

Hashtable<Object, Double> hashTable = new Hashtable<>();

看跌期权价值 ...

得到最大

Optional<Double> optionalMax = hashTable.values().stream().max(Comparator.naturalOrder());

if (optionalMax.isPresent())
 System.out.println(optionalMax.get());
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top