2012-05-26 13 views
61

Tôi đang tìm cách đổi tên khóa Hashmap, nhưng tôi không biết nếu nó có thể trong Java.Có thể đổi tên khóa Hashmap không?

+8

Gosh, tôi hy vọng là không. Việc xóa và nhập lại cặp khóa/giá trị có vẻ giống như cách để đi. Lưu ý rằng bạn thường chỉ xử lý các tham chiếu trong chính bản đồ. –

+3

Vui lòng không sửa đổi khóa của mục nhập băm! Nếu bạn may mắn, bạn sẽ thay đổi nó thành một cái gì đó với cùng một hashcode và bạn sẽ chỉ đi một chút điên rồ cố gắng để tìm ra những gì đã xảy ra; nếu bạn không may mắn, bạn sẽ kết thúc với một mục mà không thể được tìm thấy (tốt, không phải cho đến khi xây dựng lại tiếp theo của toàn bộ bảng). Hủy bỏ/reinsert là nhiều saner, và nên được khá rẻ (đó là tất cả các tài liệu tham khảo, sau khi tất cả). –

Trả lời

86

Cố gắng xóa phần tử và đặt lại thành phần đó với tên mới. Giả sử các phím trong bản đồ của bạn được String, nó có thể đạt được như vậy:

Object obj = map.remove("oldKey"); 
map.put("newKey", obj); 
+34

+1. Và đơn giản nhất để đọc là 'map.put (" newKey ", map.remove (" oldKey "));' và được cung cấp chứa 'oldKey' –

+6

Theo như khả năng đọc có liên quan, tôi hoàn toàn không đồng ý, tôi thường muốn thấy rõ rằng một đối tượng được xóa khỏi bản đồ và sau đó thêm vào. Và kể từ khi OP có vẻ khá mới đối với Java, tôi quyết định đặt nó theo cách đó. Vì lợi ích của hiệu suất tuy nhiên, phiên bản của bạn là tất nhiên thích (vì tôi không nghĩ rằng trình biên dịch sẽ tối ưu hóa phiên bản của tôi theo cách của bạn). –

+2

Đối với javac 1.8.0_45, phiên bản một dòng là hai bytecode ngắn hơn, làm tôi ngạc nhiên. Khó chịu hơn với Generics, bạn không thể chuyển 'obj' thành' put' mà không truyền nó hoặc khai báo nó như một kiểu khác, nhưng tất nhiên là truyền kết quả của 'remove' trực tiếp. –

4

Bạn không đổi tên khóa băm, bạn phải chèn mục nhập mới bằng khóa mới và xóa mục cũ.

11

Gán giá trị của khóa, mà cần phải được đổi tên, đến một khóa mới. Và xóa khóa cũ.

hashMap.put("New_Key", hashMap.get("Old_Key")); 
hashMap.remove("Old_Key"); 
4

Bạn không thể đổi tên/thay đổi hashmap chính một lần nói thêm.

Cách duy nhất là xóa/xóa khóa và chèn cặp khóa và giá trị mới.

Lý do: Thực hiện nội hashmap HashMap modifier key đánh dấu là thức.

static class Entry<K ,V> implements Map.Entry<K ,V> 
{ 
final K key; 
V value; 
Entry<K ,V> next; 
final int hash; 
...//More code goes here 
} 

Đối với tham chiếu: HashMap

6
hashMap.put("New_Key", hashMap.remove("Old_Key")); 

này sẽ làm những gì bạn muốn, nhưng bạn sẽ nhận thấy rằng vị trí của phím đã thay đổi.

+0

@Vins xem lại tài liệu xin vui lòng: D, remove() sẽ trả về đối tượng, kiểm tra https://www.tutorialspoint.com/java/util/hashmap_remove.htm –

+0

xấu của tôi, tôi đã xóa nhận xét của tôi và bỏ phiếu cho nó. Xin lỗi vì điều đó. – Vins