2009-06-30 33 views
62

Tôi đang gặp phải sự cố dường như không có giải pháp khắc nghiệt.Cập nhật mục nhập bản đồ java

Tôi đang sử dụng java.util.Map và tôi muốn cập nhật giá trị trong cặp Khóa-Giá trị.

Ngay bây giờ, tôi đang làm nó Lik này:

private Map<String,int> table = new HashMap<String,int>(); 
public void update(String key, int val) { 
    if(!table.containsKey(key)) return; 
    Entry<String,int> entry; 
    for(entry : table.entrySet()) { 
     if(entry.getKey().equals(key)) { 
      entry.setValue(val); 
      break; 
     } 
    } 
} 

Vậy là có phương pháp nào để tôi có thể nhận được các yêu cầu Entry đối tượng mà không cần phải lặp thông qua toàn bộ Map? Hoặc là có một số cách để cập nhật giá trị của mục nhập tại chỗ? Một số phương pháp trong số Map như setValue(String key, int val)?

jrh

+0

PS: table.entrySet của nó(). Tôi đã gõ sai ở đây. – jrharshath

+0

Bạn có thể xóa câu lệnh "if" đầu tiên. Nó vẫn gây ra một sự lặp lại đầy đủ thông qua bản đồ nếu khóa không có. Nếu bạn xóa nó, bạn sẽ vẫn lặp qua toàn bộ bản đồ và không thực hiện bất cứ điều gì nếu khóa không có. Ngay bây giờ nếu chìa khóa hiện diện, bạn lặp lại qua bản đồ, thấy rằng nó có mặt, và sau đó lặp lại thông qua các mục nhập một lần nữa. –

Trả lời

136

Có gì sai với chỉ

table.put(key, val); 

?

+3

khóa đã tồn tại. nó sẽ là một vấn đề? – jrharshath

+42

Không, giá trị cũ cho khóa đó sẽ bị ghi đè. – skaffman

+2

ồ, tuyệt. Tôi ước điều này được nói ở đâu đó trong tài liệu. Có lẽ tôi đã không đọc đúng. – jrharshath

5

Bạn chỉ cần sử dụng method

public Object put(Object key, Object value) 

nếu phím đã hiện diện trong bản đồ thì giá trị trước đó được trả về.

11

Nếu phím có mặt table.put(key, val) sẽ chỉ ghi đè lên giá trị khác, nó sẽ tạo mục nhập mới. Poof! và bạn đã xong. :)

bạn có thể nhận được giá trị từ một bản đồ bằng cách sử dụng chìa khóa là table.get(key); Đó là về nó

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