如何在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); }};