2015-11-04 7 views
7

Tut mir leid, diese Frage zu stellen, aber ich bin neu in Java.Wie mache ich Java Hashtable.containsKey für Array arbeiten?

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)); 

mit .containsKey funktioniert nicht (wie das gedruckte Ergebnis "False" ist)

Hashtable<Integer,Integer> mapint = new Hashtable<Integer, Integer>(); 
int i = 5; 
mapint.put(i, i); 
int j = 5; 
System.err.println(mapint.containsKey(j)); 

Werke (das gedruckte Ergebnis "True")

ich, es hat etwas zu verstehen, tun mit Objektreferenz, aber konnten keine Lösung nach dem Suchen erreichen ...

Gibt es irgendwie kann ich Hashtable verwenden, um Schlüssel mit Art des Feldes zu finden? Ich möchte nur testen, ob ein bestimmtes Array in Hashtable als Schlüssel ist ...

Alle Treffer wären toll. Danken!!!

+1

Für Ihr besonderes Problem, können Sie das Array mit einem 'ByteBuffer' wickeln,' map.put (ByteBuffer.wrap (temp), temp); '. –

Antwort

6

Sie können keine Arrays als Schlüssel verwenden, in einem HashTable/HashMap, da sie die Standardimplementierung von Object ‚s nicht tun außer Kraft setzen equals, die temp.equals(temp2), wenn und nur wenn temp==temp2 bedeutet, die nicht wahr in Ihrem Fall ist.

Sie können einen Set<Byte> oder List<Byte> anstelle eines byte[] für Ihren Schlüssel verwenden.

Zum Beispiel:

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))); 
+0

Danke für den Kommentar! In diesem Fall muss ich eine alternative Methode verwenden, ein naives Methid, das ich mir vorstellen kann, besteht darin, das Array in String umzuwandeln, aber das scheint dumm ... Gibt es da überhaupt etwas, das umgeht? – Jack

+0

@Jack Siehe mein Beispiel. BTW, warum verwenden Sie eine HashTable, wenn der Schlüssel und der Wert identisch sind? Sie können stattdessen ein 'HashSet' verwenden. – Eran

+0

Vielen Dank für die Lösung. Ich arbeite! Ich werde die Verwendung von Set oder Liste ... – Jack