【发布时间】:2014-07-18 10:38:30
【问题描述】:
在研究并查找旧帖子一段时间后,我意识到当您在 Java 中使用字符串为键的 Hashmap 或 Hashtable 时,第一“轮”散列将应用于每个 String 对象 hashCode(显然有第二个哈希函数应用于int hashCode()) 的结果,默认情况下int hashCode()与其调用者在内存中的位置有某种关系(从我读到的)。话虽如此,如果我有一个带有开发人员定义的键类的映射,我读到我可以覆盖 int hashCode() 并使用我的对象的一些不同字段来为每个对象返回最独特的 int 可能。但是,请考虑下面包含原始类型数组的代码片段。
import java.util.HashMap;
public class test
{
public static void main(String[] args) {
HashMap<char[], int[] > map = new HashMap<char[], int[]>();
String s = "Hello, World";
int x[] = { 1, 2, 3, 4, 5 };
map.put( s.toCharArray(), x );
x = map.get( s );
for ( int i : x )
System.out.print( i );
}
}
程序从NullPointerException 崩溃当然是因为map.get( s ); 返回null。我怀疑这是因为map.put() 和map.get() 之间有两个不同的引用。我希望程序输出的是 1 2 3 4 5。
我的问题:如何让上面的代码片段通过键的值与键的引用来查找键?也就是如何让程序输出1 2 3 4 5?
编辑: 我使用哈希图作为查找表。我正在从文件中读取字符串,需要一种快速的方法来确定我刚刚读入的字符串是否在表中。
【问题讨论】:
标签: java string-hashing