Khi tôi lặp lại các giá trị hoặc khóa, chúng có tương quan không? Liệu khóa thứ hai có ánh xạ tới giá trị thứ hai không?Khi sử dụng HashMap là các giá trị và các khóa được đảm bảo theo cùng một thứ tự khi lặp lại?
Trả lời
Không, không nhất thiết. Bạn thực sự nên sử dụng trình nhập mục(). Iterator() cho mục đích này. Với trình lặp này, bạn sẽ đi qua tất cả các đối tượng Map.Entry trong Bản đồ và có thể truy cập từng khóa và giá trị được liên kết.
Câu hỏi làm tôi bối rối lúc đầu nhưng @Matt đã giải thích cho tôi.
Xem xét sử dụng phương thức entrySet() trả về tập hợp với cặp khóa-giá trị trên Bản đồ.
Map<Integer, Integer> a = new HashMap<Integer, Integer>(2);
a.put(1, 2);
a.put(2, 3);
for (Map.Entry<Integer, Integer> entry : a.entrySet()) {
System.out.println(entry.getKey() + " => " + entry.getValue());
}
đầu ra này:
1 => 2
2 => 3
3 => 3
Cả hai giá trị() và keySet() ủy nhiệm cho bộ lặp nhập vàoSetSet() để chúng sẽ được trả về theo cùng thứ tự. Nhưng giống như Alex nói tốt hơn nhiều là nên sử dụng trình lặp() iterator nhập trực tiếp.
Đây là chi tiết triển khai. Tôi không nghĩ rằng có bất kỳ đảm bảo rằng điều này là đúng sự thật. –
sử dụng entrySet rằng @Cuchullain đề cập:
Map<String, String> map = new HashMap<String, String>();
// populate hashmap
for (Map.Entry<String, String> entry : map.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
// your code here
}
Bạn muốn sử dụng này, LinkedHashMap, cho khả năng dự đoán trật tự lặp
... hoặc LinkedHashSet nếu bạn cần một bộ đặt hàng xác định –
Tôi thứ hai @basszero. Trong khi
for (Map.Entry<Integer, Integer> entry : a.entrySet())
sẽ hoạt động, tôi thấy sử dụng cấu trúc dữ liệu tự động làm đẹp hơn. Bây giờ, bạn có thể chỉ cần lặp lại "bình thường"
Phương thức set của HashMap trả về một Tập hợp, không đảm bảo trật tự.
Phương thức values () của HashMap trả về một Collection, không đảm bảo trật tự.
Điều đó nói rằng, câu hỏi là "chúng sẽ tương quan" về mặt kỹ thuật câu trả lời là có thể, nhưng không dựa vào nó.
Tôi đồng ý với pmac72. Đừng cho rằng bạn sẽ nhận được các giá trị hoặc khóa đặt hàng từ một bộ sưu tập không có thứ tự. Nếu nó hoạt động theo thời gian thì đó chỉ là nguy hiểm thuần túy. Nếu bạn muốn trật tự được bảo tồn, hãy sử dụng LinkedHashMap hoặc TreeMap hoặc bộ sưu tập commons OrderedMap.
public class Test {
public static void main(String[] args) {
HashMap <String,String> hashmap = new HashMap<String,String>();
hashmap.put("one", "1");
hashmap.put("two", "2");
hashmap.put("three", "3");
hashmap.put("four", "4");
hashmap.put("five", "5");
hashmap.put("six", "6");
Iterator <String> keyIterator = hashmap.keySet().iterator();
Iterator <String> valueIterator = hashmap.values().iterator();
while(keyIterator.hasNext()) {
System.out.println("key: "+keyIterator.next());
}
while(valueIterator.hasNext()) {
System.out.println("value: "+valueIterator.next());
}
}
}
key: two
key: five
key: one
key: three
key: four
key: six
value: 2
value: 5
value: 1
value: 3
value: 4
value: 6
- 1. Foreach có được đảm bảo lặp lại theo thứ tự mảng trong php không?
- 2. Thứ tự của một từ điển Python có được đảm bảo lặp lại không?
- 3. Có an toàn để thay đổi khóa/giá trị HashMap trong khi lặp lại không?
- 4. Thứ tự các mục trong HashMap khác nhau khi cùng một chương trình được chạy trong JVM5 và JVM6
- 5. Khi các khóa của JsonObject được lặp lại, chúng không theo thứ tự như trong phản hồi từ máy chủ
- 6. Các yêu cầu AJAX tiếp theo có được đảm bảo để nhận được theo thứ tự không?
- 7. Các phím và giá trị trả lại Dict có cùng thứ tự không?
- 8. Thứ tự semaphore được đảm bảo?
- 9. Với liệt kê nhanh và NSDictionary, việc lặp lại theo thứ tự các khóa không được đảm bảo - làm thế nào tôi có thể tạo nó theo thứ tự IS?
- 10. os.walk lặp lại theo thứ tự nào?
- 11. Thứ tự của các mục được đọc từ một XDocument, bởi LINQ, Đảm bảo?
- 12. Bộ sưu tập khóa/giá trị duy trì thứ tự
- 13. Liệu hashmap.keyset() có trả về các khóa theo thứ tự chúng được thêm vào hashmap không?
- 14. Được bảo đảm chắc chắn sẽ trả lại kết quả theo thứ tự?
- 15. Python: Khi nào một biến được truyền theo tham chiếu và khi nào theo giá trị?
- 16. Có phải cho (auto i: unordered_map) được đảm bảo có cùng thứ tự mỗi lần không?
- 17. Khi lặp lại các giá trị, tại sao typeof (giá trị) trả về "chuỗi" khi giá trị là một số? Javascript
- 18. Sắp xếp một HashMap dựa trên Giá trị rồi Khóa?
- 19. Thứ tự lặp lại của các bộ trong Python
- 20. foreach% dopar% - đảm bảo về thứ tự kết quả?
- 21. Trong Delphi, các tham số được đánh giá theo thứ tự khi được chuyển vào một phương thức?
- 22. Sử dụng giá trị cột tối đa theo thứ tự
- 23. Đặt hàng HashMap theo thứ tự bảng chữ cái theo giá trị
- 24. Các tham số mảng trong đường ray có được bảo đảm theo thứ tự xuất hiện trong url không?
- 25. Tuyên bố LINQ để lặp qua bộ sưu tập và đảm bảo mỗi mục theo đúng thứ tự?
- 26. Việc liệt kê nhanh trong Objective-C có đảm bảo thứ tự lặp lại không?
- 27. Lấy khóa từ HashMap bằng cách sử dụng giá trị
- 28. Thứ tự khóa/giá trị Jersey JSON
- 29. TCP có được đảm bảo đến đúng thứ tự không?
- 30. Bộ sưu tập cặp khóa/giá trị chung trong đó giữ lại thứ tự chèn?
tôi nghĩ đó là câu hỏi đầu tiên, nhưng có vẻ như anh ấy lặp lại các khóa và giá trị một cách độc lập bằng cách sử dụng các phương thức .keys() và .values (). tôi không nghĩ rằng LinkedHashMap giải quyết vấn đề trong trường hợp này – Matt
Cảm ơn Matt - khiến tôi bối rối ở đó :). –
Trên một lưu ý khác, bạn không bao giờ nên tạo một HashMap có cùng kích thước với số lượng các phần tử mong muốn. HashMaps có một loadfactor thường là 75%. Điều này có nghĩa rằng nếu bản đồ đầy đủ 75% và bạn thêm một phần tử, nó sẽ tăng kích thước của nó. –