很抱歉提出这个问题,但我是Java的新手。
Hashtable<byte[],byte[]> map = new Hashtable<byte[],byte[]>();
byte[] temp = {1, -1, 0};
map.put(temp, temp);
byte[] temp2 = {1, -1, 0};;
System.err.println(map.containsKey(temp2));
不适用于.containsKey(因为打印结果为“False”)
Hashtable<Integer,Integer> mapint = new Hashtable<Integer, Integer>();
int i = 5;
mapint.put(i, i);
int j = 5;
System.err.println(mapint.containsKey(j));
有效(打印结果为“True”)
我知道它与对象引用有关,但在搜索后无法找到任何解决方案......
无论如何我可以使用Hashtable查找具有Array类型的键吗?我只想测试一个特定的数组是否在Hashtable中作为键...
任何点击都会很棒。谢谢!!!
答案 0 :(得分:6)
您不能将数组用作HashTable/HashMap
中的键,因为它们不会覆盖Object
equals
的默认实现,表示temp.equals(temp2)
当且仅当temp==temp2
时,在您的情况下不正确。
您可以使用Set<Byte>
或List<Byte>
代替byte[]
作为密钥。
例如:
Hashtable<List<Byte>,Byte[]> map = new Hashtable<List<Byte>,Byte[]>();
Byte[] temp = {1, -1, 0};
map.put(Arrays.asList(temp), temp);
Byte[] temp2 = {1, -1, 0};;
System.err.println(map.containsKey(Arrays.asList(temp2)));