如何在Java中创建哈希表?

时间:2020-03-05 18:43:36  来源:igfitidea点击:

用Java创建哈希表(或者关联数组...)的最直接方法是什么?我的google-fu举了几个例子,但是有标准的方法吗?

有没有一种方法可以用键->值对的列表填充表,而无需为每个对分别在对象上调用add方法?

解决方案

回答

import java.util.HashMap;

Map map = new HashMap();

回答

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

这两个类都可以从java.util包中找到。下面的jGuru FAQ条目解释了两者之间的区别。

回答

埃德蒙说了什么。

至于不一直调用.add,不,不是惯用的。如果我们确实想做的话,将会有各种各样的技巧(将其存储在一个数组中然后循环),但是我不建议这样做。

回答

同样不要忘记Map和Hashtable在Java 5及更高版本中都是通用的(就像在Collections框架中的任何其他类中一样)。

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);

回答

And is there a way to populate the table with a list of key->value pairs without individually calling an add method on the object for each pair?

这个问题的一个问题是,我们没有提到数据以什么形式开头。如果对列表恰好是Map.Entry对象的列表,那将非常容易。

只是为了解决这个问题,有一个名为java.util.Properties的(非常残酷的)类,它是Hashtable的扩展。它仅需要字符串键和值,并允许我们使用文件或者流加载和存储数据。它读取和写入的文件格式如下:

key1=value1
key2=value2

我不知道这是否是我们要寻找的东西,但是在某些情况下这可能会很有用。

回答

我们可以使用双花括号来设置数据。我们仍然可以调用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);
 }};