2013-07-16 35 views

Trả lời

2

Đây là hoạt động hoàn toàn an toàn mà bạn đang làm vì bạn chỉ thay đổi giá trị của một khóa hiện có trong Bản đồ.

Tuy nhiên, nếu bạn định xóa mục nhập khỏi Bản đồ thì hãy nhớ sử dụng Iterator.

7

Như bạn có thể thấy trong HashMap source code, phương pháp put chỉ sửa đổi modCount khi khóa mới được cung cấp. modCount được sử dụng bởi trình vòng lặp để kiểm tra các thay đổi và nếu xảy ra thay đổi như vậy giữa hai cuộc gọi đến số next() của một trình lặp, một số ConcurrentModificationException sẽ bị ném. Điều này có nghĩa là cách bạn đang sử dụng putan toàn.

8

Bạn có thể xem xét việc viết mã của bạn hiệu quả hơn như:

Map<Long, Integer> map = new HashMap<Long, Integer>(); 
for (Entry<Long, Integer> entry : map.entrySet()) { 
    entry.setValue(entry.getValue() - 1); 
} 

Đây là một vi-tối ưu hóa, nhưng đôi khi nó quan trọng, và bạn không bị mất bất cứ điều gì. Nó ngắn hơn và dọn dẹp mọi sự mơ hồ về sự an toàn để khởi động!

+0

đây là quá nhiều mã, tôi không biết nhưng tôi thấy nó xấu xí: / –

Các vấn đề liên quan