2014-10-11 26 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是没有线程安全的。在这方面,尽管目前这两种方式都同样不安全。