這段時間以來,我一直在嗡嗡聲。基本上,每當我想將我自己的一組對象(我稱之爲MyObject)作爲地圖中的鍵存儲時,除非我的課程中保存有相同的確切對象,否則我無法獲得鍵值。儘管我試圖重寫MyObject中的equals方法,但在比較具有相同值的兩個對象時通常返回true,沒有任何更改。地圖檢查密鑰如何?
只給你我的意思示範:
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(2, 3);
System.out.println(map.get(2)));
現在,你可能期望的,它搜索地圖的整數對象2,然後打印出3。如果該整數不存在,則它輸出null。到現在爲止還挺好。
Map<String, Integer> map = new HashMap<String, Integer>();
map.put(new String("hi"), 3);
System.out.println(map.get(new String("hi")));
這一個作品也如預期。我們只是得到關鍵「嗨」的價值。
Map<MyObject, Integer> map = new HashMap<MyObject, Integer>();
map.put(new MyObject(), 3);
System.out.println(map.get(new MyObject()));
即使,沒有技術上的「新MyObject來()」和「新MyObject來()」,則返回null之間的區別,無論如何,除非我救了新myObject用作一個實例我的類,並使用該實例作爲get方法的參數。
與我的MyObject相反,如果鍵是字符串或整數,映射很容易獲取鍵值。這些類型是否有特權或者有辦法告訴地圖:「嘿,新創建的對象與那個列表中的類似」?地圖如何比較對象?
地圖將根據實現來檢查密鑰。 HashMap使用哈希碼來完成它。 – porfiriopartida
@porfiriopartida是否有另一個地圖可用於比較兩個相似的對象? –
是的,Map文檔中很少。只需google查詢java.util.Map並查看所有已知實現類部分。 – porfiriopartida