2014-10-11 25 views
-3

哈希映射存儲數據。Java代碼將值放入哈希映射

private final Map<VideoObj,Record> _data = new HashMap<VideoObj,Record>(); 

是什麼

Record rIn= new Record(video, numOwned+change, numOut, numRentals); 
_data.put(video, rIn); 

而且

Record r= _data.get(video); 
r.numOwned+=change; 

在哪些情況下可以在此創建的價值觀問題之間的區別。

+0

第一個代碼示例是將鍵/值添加到散列映射。第二個例子是檢索一個鍵/值,然後更新一個屬性。假設Record構造函數中的第二個參數填充numOwned,它們應該等同於numOwned記錄的值。 – 2014-10-11 03:42:58

回答

0

第一個會創建一個新的Record實例並將其放入密鑰video的映射中,該映射將替換映射中爲該密鑰存儲的先前值。

第二個更改密鑰video的映射中存儲的當前Record值。但是,它不驗證映射實際上是否包含該鍵,因此您可能會遇到NullPointerException。

1

視頻應該覆蓋equals和hashcode方法,最好視頻類應該是最終的。

1

我寧願採用第二種方法,引入空檢查並記錄。

通過這種方式,程序清晰(簡潔地)傳達了不變量。

代碼也暗示了值,Record是一個可變類。所以再次首先沒有任何優勢,爲什麼花在記憶上呢。

最後記得hashmap是沒有線程安全的。在這方面,儘管目前這兩種方式都同樣不安全。