2015-11-04 21 views
7

Siamo spiacenti di chiedere questa domanda, ma io sono nuovo di Java.Come posso far funzionare Java Hashtable.containsKey per l'array?

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

non funziona con .containsKey (come il risultato stampato è "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)); 

opere (il risultato stampato è "True")

Capisco che abbia qualcosa a fare con riferimento all'oggetto, ma non è stato possibile raggiungere alcuna soluzione dopo la ricerca ...

Esiste comunque la possibilità di utilizzare Hashtable per trovare la chiave con il tipo di matrice? Voglio solo verificare se una matrice specifica è in Hashtable come chiave ...

Qualsiasi risultato sarebbe ottimo. Grazie!!!

+1

Per il vostro problema specifico, si può avvolgere la matrice con un 'ByteBuffer',' map.put (ByteBuffer.wrap (temp), temp); '. –

risposta

6

Non è possibile utilizzare le matrici come chiavi in ​​un HashTable/HashMap, dal momento che non sostituiscono l'implementazione predefinita di Object s' equals, il che significa temp.equals(temp2) se e solo se temp==temp2, che non è vero nel tuo caso.

È possibile utilizzare uno Set<Byte> o List<Byte> anziché uno byte[] per la chiave.

Ad esempio:

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

Grazie per il commento! In questo caso, ho bisogno di usare un metodo alternativo, un metad di ingenuo che posso pensare è quello di convertire la matrice in String, ma ciò sembra stupido ... Esiste comunque un modo per aggirare questo? – Jack

+0

@Jack Vedi il mio esempio. A proposito, perché usi una HashTable se la chiave e il valore sono gli stessi? Puoi invece usare un 'HashSet'. – Eran

+0

Grazie mille per la soluzione. Lavoro! Studierò l'uso del Set o dell'elenco ... – Jack