[英]How do I create a hash table in Java?
在Java中创建哈希表(或关联数组...)最直接的方法是什么? 我的google-fu已经出现了几个例子,但是有一种标准的方法吗?
有没有办法用键 - >值对列表填充表,而无需在每个对的对象上单独调用add方法?
Map map = new HashMap();
Hashtable ht = new Hashtable();
这两个类都可以从java.util包中找到。 以下jGuru FAQ条目中解释了2之间的区别。
您可以使用双括号来设置数据。 你仍然可以调用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及更高版本中都是通用的(与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);
import java.util.HashMap;
Map map = new HashMap();
埃德蒙说的话。
至于不是一直打电话给.add,不,不是惯用。 如果你真的想要,你可以做各种黑客(将它存储在数组中然后循环),但我不推荐它。
值得注意的是,Java的哈希函数不是最优的。 如果你想减少碰撞并几乎完全消除~50%容量的重新散列,我会使用Buz Hash算法Buz Hash
Java的散列算法很弱的原因在于它如何散列字符串最为明显。
"a".hash()
给你ASCII表示"a"
- 97
,所以"b"
将是98
。 散列的重点是分配任意和“尽可能随机”的数字。
如果您需要快速而脏的哈希表,请java.util
使用java.util
。 如果您正在寻找更具可扩展性的强大功能,我会考虑实现您自己的功能。
有没有办法用键 - >值对列表填充表,而无需在每个对的对象上单独调用add方法?
您的问题的一个问题是,您没有提到数据开头的形式。 如果您的对列表碰巧是Map.Entry对象的列表,那将非常简单。
为了解决这个问题,有一个名为java.util.Properties的(备受诟病的)类,它是Hashtable的扩展。 它只需要String键和值,并允许您使用文件或流加载和存储数据。 它读写的文件格式如下:
key1=value1
key2=value2
我不知道这是否是您正在寻找的,但有些情况下这可能是有用的。
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 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.