2014-11-06 105 views
1

嗨,我有每個大小爲8個字節的bytearrays,我需要將它們存儲在散列表或散列表中。例如說,我有1000塊...然後它將存儲第一個鍵和值(bytearray),然後當block2被傳遞時,它應該檢查它是否已經存在於hahtable中,如果不存在它應該遞增並且計數應該遞增。我已經寫了代碼來存儲,但問題是它無法搜索,可能是我存儲在字節數組中的方式。如何在hashmap中存儲bytearrays或在java中hashtable

代碼:

int collisions = 0; 
Hashtable<Integer, Long> ht = new Hashtable<Integer, Long>(); 
// Given bloc1 value here 
if(ht.contains(bloc1)) { 
    collisions++; 
} 
else { 
    ht.put(i,ByteBuffer.wrap(bloc1).getLong()); 
} 

問題是:ht.contains未得到所需O/P

+1

所以你想在添加一個新的字節數組之前搜索字節數組或者鍵?這個問題確實需要代碼。 – markspace 2014-11-06 23:25:19

+0

請提出您的嘗試,尤其是在提及您有代碼後 – 2014-11-06 23:28:25

+0

您需要編輯您的問題才能更清楚,然後才能提供幫助。字節數組是鍵還是值?如果他們是價值觀,那麼沒有問題,你的錯誤在別處。也請詳細解釋您所遇到的問題。 – Radiodef 2014-11-06 23:29:13

回答

0

byte[]目的和其它陣列對象中的Java具有從Object繼承equals()方法,也就是即通過引用來比較,而不是數組內容。

來解決問題(沒有附加的依賴於庫)的simpliest方式是存儲8字節數組作爲long S:

Map<Long, Value> map = new HashMap<>(); 
... 
// map.put(byteArray, value); 
map.put(ByteBuffer.wrap(byteArray).getLong(), value); 
0

解決方案: INT碰撞= 0; Hashtable ht = new Hashtable(); //鑑於bloc1這裏 值如果(ht.contains(ByteBuffer.wrap(bloc1).getLong())) {碰撞++;} 否則{ ht.put(I,ByteBuffer.wrap(bloc1).getLong( )); }