2012-08-06 41 views
7

Tôi đang nghiên cứu trên Map giây và tôi phát hiện ra rằng nếu tôi thêm cùng một khóa hai lần cố ý thì kích thước của Bản đồ vẫn giữ nguyên. Lý do kỹ thuật đằng sau điều này là gì?thêm cùng một khóa hai lần vào Bản đồ

Map map=new HashMap();//HashMap key random order. 
     map.put("Amit","Java"); 
     map.put("Amit","Java"); 

Mã để lấy ...

System.out.println("There are "+map.size()+" elements in the map."); 
     System.out.println("Content of Map are..."); 
     Set s=map.entrySet(); 
     Iterator itr=s.iterator(); 
     while(itr.hasNext()) 
     { 
      Map.Entry m=(Map.Entry)itr.next(); 
      System.out.println(m.getKey()+"\t"+m.getValue()+"\t"+ m.hashCode()); 
      } 

Kết quả mà tôi nhận được:

There are 1 elements in the map. 
Content of Map are... 
Amit Java 3943477 
+8

Đó là toàn bộ điểm của Maps. – Pshemo

Trả lời

22

Map's contract là phím phải là duy nhất. Vì vậy, nếu bạn kết hợp một giá trị mới với khóa hiện tại, nó sẽ ghi đè giá trị của mục nhập hiện tại, không tạo mục nhập mới:

Một đối tượng ánh xạ khóa tới giá trị. Bản đồ không thể chứa các khóa trùng lặp; mỗi khóa có thể ánh xạ tới nhiều nhất một giá trị.

Bạn cũng có thể kiểm tra Map#put() javadoc (tôi nhấn mạnh):

Associates giá trị quy định với phím quy định trong bản đồ này (hoạt động không bắt buộc). Nếu bản đồ trước đó chứa ánh xạ cho khóa, giá trị cũ được thay thế bằng giá trị được chỉ định. (Bản đồ m được gọi là chứa ánh xạ cho khóa k nếu và chỉ khi m.containsKey (k) trả về giá trị true.)

+0

http://docs.oracle.com/javase/7/docs/api/java/util/Map.html –

+0

@ assylias..Cảm ơn quy tắc này áp dụng cho mọi hình thức bản đồ cho dù đó là bản đồ cây v.v. ! – user1579492

+0

Nếu quy tắc này không áp dụng, thì đó không phải là triển khai hợp lệ 'Bản đồ'. Vì vậy, vâng. –

0

Nếu khóa mới giống như bất kỳ khóa hiện có nào, thì giá trị trong bản đồ bị ghi đè.

2

Bản đồ Java chuẩn chỉ có thể có một giá trị cho mỗi khóa. Lưu ý rằng giá trị đó có thể là một bộ sưu tập và do đó bạn có thể lưu trữ hiệu quả nhiều giá trị cho mỗi khóa.

Nếu bạn muốn có nhiều khóa giống hệt nhau trong bản đồ, các giải pháp khác nhau tồn tại. Xem ví dụ: Guava Multimap.

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