I’m trying to make a hashtable in java where the keys are int[], but it dosen’t work. I have made a little test program to show my problem:
public class test{
public static void main(String[] args){
int[] test0 = {1,1};
int[] test1 = {1,1};
Hashtable<int[], String> ht = new Hashtable<int[], String>();
String s0 = "foo";
ht.put(test0, s0);
System.out.println("the result from ht.get(test1)");
System.out.println(ht.get(test1));
System.out.println("the result from ht.get(test0)");
System.out.println(ht.get(test0));
}
}
My intention is that both ht.get calles should return the same result, since the two arrays are equal, but they dont. Here is the result from running the code:
the result from ht.get(test1)
null
the result from ht.get(test0)
foo
Am I missing something here or is it just impossible to use int[] as keys in a hastable?
You can use int[] as the key, but it has to be the same array, not just have the same content. (Which means it won’t do what you want)
Arrays are not equals() or have the same hashCode() based on their content on if they are the same array.
The only way you can do this is to use a List<Integer> as a key or a wrapper for your int[] e.g. TIntArrayList.
try the following.
BTW: Hashtable is a legacy class IMHO, don’t use it unless you have to.