nhận giá trị chuỗi từ HashMap tùy thuộc vào tên khóa


123

Tôi có một HashMapvới các khóa và giá trị khác nhau, làm cách nào để lấy ra một giá trị?

Tôi có một khóa trong bản đồ được gọi my_code, nó phải chứa một chuỗi, làm thế nào tôi có thể lấy nó mà không cần phải lặp lại bản đồ?

Cho đến nay tôi đã có ..

   HashMap newMap = new HashMap(paramMap);
   String s = newMap.get("my_code").toString();

Tôi đang mong đợi thấy một String, chẳng hạn như "ABC" hoặc "DEF" vì đó là những gì tôi đã đưa vào đó lúc đầu, nhưng nếu tôi làm vậy, System.out.println()tôi sẽ nhận được một cái gì đó nhưjava.lang.string#F0454

Xin lỗi, tôi không quá rành về bản đồ như bạn có thể đoán;)

Câu trả lời:


166

Chỉ sử dụng Map#get(key)?

Object value = map.get(myCode);

Đây là hướng dẫn về bản đồ, bạn có thể thấy hữu ích: http://java.sun.com/docs/books/tutorial/collections/interfaces/map.html .

Chỉnh sửa: bạn đã chỉnh sửa câu hỏi của mình với nội dung sau:

Tôi đang mong đợi thấy một Chuỗi, chẳng hạn như "ABC" hoặc "DEF" vì đó là những gì tôi đặt ở đó ban đầu, nhưng nếu tôi thực hiện System.out.println (), tôi nhận được một cái gì đó giống như java.lang.string # F0454

Xin lỗi, tôi không quá rành về bản đồ như bạn có thể đoán;)

Bạn đang thấy kết quả của Object#toString(). Tuy nhiên, java.lang.Stringnên đã có một thực hiện, trừ khi bạn đã tạo ra một tùy chỉnh thực hiện với một chữ thường strong tên: java.lang.string. Nếu nó thực sự là một đối tượng tùy chỉnh, thì bạn cần ghi đè Object#toString()để có được "chuỗi người có thể đọc được" bất cứ khi nào bạn thực hiện một System.out.println()hoặc toString()trên đối tượng mong muốn. Ví dụ:

@Override
public String toString() {
    return "This is Object X with a property value " + value;
}

1
Tất nhiên, nếu bạn đang tạo một lớp chuỗi tùy chỉnh, tôi khuyên bạn (1) không nên làm điều đó, vì nó có thể không phải là những gì bạn muốn làm và (2) nếu bạn định làm điều đó, KHÔNG đưa nó vào không gian tên java.lang.
MatrixFrog

1
if HashMap <String, String> newMap = new HashMap <String, String> (); làm thế nào để lấy phần tử chuỗi từ này ...? where String value = newMap.get ("my_code"); cho lỗi
kilaru saidesh

làm thế nào bạn có thể nghịch đảo? lấy khóa từ giá trị?
delive

58

Nếu bạn đang lưu trữ khóa / giá trị dưới dạng chuỗi, thì điều này sẽ hoạt động:

HashMap<String, String> newMap = new HashMap<String, String>();
newMap.put("my_code", "shhh_secret");
String value = newMap.get("my_code");

Câu hỏi là những gì được điền vào HashMap (khóa & giá trị)


if HashMap <String, String> newMap = new HashMap <String, String> (); làm thế nào để lấy phần tử chuỗi từ này ...? where String value = newMap.get ("my_code"); cho lỗi
kilaru saidesh

11

Nếu bạn sẽ sử dụng Generics và xác định bản đồ của bạn là

Map<String,String> map = new HashMap<String,String>();

sau đó tìm nạp giá trị dưới dạng

 String s = map.get("keyStr"); 

bạn sẽ không bắt buộc phải gõ map.get () hoặc gọi phương thức toString để nhận giá trị Chuỗi


9

Tôi e rằng câu hỏi của bạn không rõ ràng chút nào. Khóa không có "tên"; nó không được "gọi là" bất cứ thứ gì liên quan đến bản đồ - nó chỉ là một chìa khóa và sẽ được so sánh với các chìa khóa khác. Nếu bạn có nhiều loại chìa khóa khác nhau, tôi thực sự khuyên bạn nên đặt chúng vào các bản đồ khác nhau để tỉnh táo.

Nếu điều này không hữu ích, vui lòng làm rõ câu hỏi - tốt hơn là với một số mã để hiển thị ý bạn.



6

Một điểm quan trọng cần lưu ý ở đây là nếu khóa của bạn là một đối tượng của lớp do người dùng định nghĩa trong java thì hãy đặt nó thành một điểm để ghi đè phương thức bằng. Vì phương thức HashMap.get (Khóa đối tượng) sử dụng phương thức bằng để so khớp giá trị khóa. Nếu bạn không ghi đè phương thức bằng thì nó sẽ cố gắng tìm giá trị chỉ dựa trên tham chiếu của khóa chứ không phải giá trị thực của khóa trong trường hợp đó nó sẽ luôn trả về giá trị rỗng.


gr8 giải thích mam :)
eLemEnt

3

Giả sử bạn đã khai báo HashMap là: -

HashMap<Character,Integer> hs = new HashMap<>();

Khi đó, khóa trong bản đồ là kiểu Kiểu dữ liệu ký tự và giá trị kiểu int. Bây giờ, để nhận giá trị tương ứng với khóa không phân biệt loại khóa, kiểu giá trị, cú pháp là: -

    char temp = 'a';
    if(hs.containsKey(temp)){
`       int val = hs.get(temp); //val is the value corresponding to key temp
    }

Vì vậy, theo câu hỏi của bạn, bạn muốn nhận giá trị chuỗi tương ứng với một khóa, đối với điều này, chỉ cần khai báo HashMap là HashMap <"datatype of key", "datatype of value" hs = new HashMap <> (); Sử dụng điều này sẽ làm cho mã của bạn sạch hơn và bạn cũng không phải chuyển đổi kết quả của hs.get ("my_code") thành chuỗi vì theo mặc định, nó trả về giá trị của chuỗi nếu tại thời điểm nhập một người giữ giá trị dưới dạng chuỗi.


1

Đây là một ví dụ khác về cách sử dụng các hàm keySet (), get (), values ​​() và entrySet () để lấy các Khóa và Giá trị trong Bản đồ:

        Map<Integer, String> testKeyset = new HashMap<Integer, String>();

        testKeyset.put(1, "first");
        testKeyset.put(2, "second");
        testKeyset.put(3, "third");
        testKeyset.put(4, "fourth");

        // Print a single value relevant to a specified Key. (uses keySet())
        for(int mapKey: testKeyset.keySet())
            System.out.println(testKeyset.get(mapKey));

        // Print all values regardless of the key.
        for(String mapVal: testKeyset.values())
            System.out.println(mapVal.trim());

        // Displays the Map in Key-Value pairs (e.g: [1=first, 2=second, 3=third, 4=fourth])
        System.out.println(testKeyset.entrySet());

0

Bạn có thể sử dụng phương thức get (Object key) từ HashMap. Xin lưu ý rằng nhiều trường hợp Lớp khóa của bạn phải ghi đè phương thức bằng, để trở thành một lớp hữu ích cho khóa Bản đồ.


0
 HashMap<Integer, String> hmap = new HashMap<Integer, String>();
 hmap.put(4, "DD");

Giá trị được ánh xạ tới Khóa 4DD

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.