散列图存储数据。
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 :(得分:1)
视频应该覆盖equals和hashcode方法,最好是Video类应该是最终的。
答案 1 :(得分:1)
我宁愿采用第二种方法,也可以使用null检查。并记录。
通过这种方式,程序清晰(简洁地)传达了不变量。
代码也暗示了值,Record是一个可变类。所以再次首先没有任何优势,为什么花在记忆上呢。
最后记住hashmap不是线程安全的。在这方面,尽管两者都是同样不安全的。
答案 2 :(得分:0)
第一个实例创建一个新的Record
实例,并将其放在键video
的映射中,这将替换为映射中该键存储的先前值。
第二个更改了密钥Record
的地图中存储的当前video
值。但是,它不会验证映射实际上是否包含该键,因此您可能会收到NullPointerException。