经过一段时间的研究和查找旧帖子后,我意识到当您在 Java 中使用字符串为键的 Hashmap 或 Hashtable 时,第一轮“散列”应用于每个字符串对象 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 );
}
}
程序当然会从 a 崩溃,NullPointerException
因为map.get( s );
返回 null。我怀疑这种情况已经发生,因为map.put()
和之间有两个不同的引用map.get()
。我希望程序输出的是 1 2 3 4 5。
我的问题:如何让上面的代码片段通过键的值与键的引用来查找键?也就是说,我怎样才能让程序输出1 2 3 4 5?
编辑:我使用哈希图作为查找表。我正在从文件中读取字符串,需要一种快速的方法来确定我刚刚读入的字符串是否在表中。