отримати значення рядка від HashMap залежно від назви ключа


123

У мене є HashMapрізні клавіші та значення, як я можу отримати одне значення?

У мене є ключ на карті, який називається my_code, він повинен містити рядок, як я можу це зробити, не переглядаючи карту?

Поки що у мене є ..

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

Я сподіваюся побачити такий String, як "ABC" або "DEF", як те, що я вкладаю туди спочатку, але якщо я це роблю, System.out.println()я отримую щось на зразокjava.lang.string#F0454

Вибачте, я не дуже знайомий з картами, як ви, напевно, можете здогадатися;)

Відповіді:


166

Просто використовувати Map#get(key)?

Object value = map.get(myCode);

Ось підручник про карти, які можуть вам бути корисними: http://java.sun.com/docs/books/tutorial/collections/interfaces/map.html .

Редагувати: ви редагували своє запитання таким чином:

Я очікую побачити рядок, наприклад "ABC" або "DEF", як те, що я вкладаю туди спочатку, але якщо я роблю System.out.println (), я отримую щось на зразок java.lang.string # F0454

Вибачте, я не дуже знайомий з картами, як ви, напевно, можете здогадатися;)

Ви бачите результат Object#toString(). Але java.lang.Stringповинен вже один реалізований, якщо ви не створили призначену для користувача реалізацію з рядкової sв імені java.lang.string. Якщо це власне об'єкт, то вам потрібно переосмислити, Object#toString()щоб отримати "читабельну людиною рядок" кожного разу, коли ви робите потрібний об'єкт System.out.println()або toString()на ньому. Наприклад:

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

1
Звичайно, якщо ви створюєте спеціальний клас рядків, я рекомендую (1) цього не робити, оскільки це, мабуть, не те, що ви хочете зробити, і (2) якщо ви збираєтесь це робити, НЕ кладіть його в Простір імен java.lang.
MatrixFrog

1
якщо HashMap <String, String> newMap = новий HashMap <String, String> (); як отримати елемент рядка з цього ...? де String value = newMap.get ("мій_код"); дає помилку
saidesh kilaru

як можна обернути? отримати ключ від значення?
доставити

58

Якщо ви зберігаєте ключі / значення як рядки, це спрацює:

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

Питання в тому, що заповнюється в HashMap (ключ і значення)


якщо HashMap <String, String> newMap = новий HashMap <String, String> (); як отримати елемент рядка з цього ...? де String value = newMap.get ("мій_код"); дає помилку
saidesh kilaru

11

Якщо ви будете використовувати Generics і визначите свою карту як

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

тоді значення отримання як

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

від вас не буде потрібно вводити map.get () або зателефонувати до методуString, щоб отримати значення String


9

Я боюся, що ваше питання зовсім не ясно. Ключ не має "імені"; що стосується карти, це нічого не називається, це лише ключ, і його порівнюватимуть з іншими ключами. Якщо у вас є багато різних типів ключів, я настійно пропоную розмістити їх на різних картах заради корисності.

Якщо це не допомагає, уточніть, будь ласка, питання - бажано з кодом, щоб показати, що ви маєте на увазі.



6

Тут важливо зазначити, що якщо ваш ключ є об'єктом визначеного користувачем класу в java, то зробіть його точкою, щоб перекрити метод рівних. Оскільки метод HashMap.get (ключ об’єкта) використовує метод рівняння для відповідності значенню ключа. Якщо ви не перекриєте метод equals, він спробує знайти значення просто на основі посилання ключа, а не фактичного значення ключа, і в цьому випадку воно завжди поверне нуль.


gr8 пояснення мама :)
eLemEnt

3

Припустимо, ви оголосили HashMap таким:

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

Тоді ключ на карті має тип типу даних символів та значення типу int. Тепер, щоб отримати значення, відповідне ключу незалежно від типу ключа, типу значення, синтаксису є: -

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

Отже, відповідно до вашого запитання ви хочете отримати значення рядка, що відповідає ключу. Для цього просто оголосьте HashMap як HashMap <"тип даних ключа", "тип даних значення" hs = new HashMap <> (); Використовуючи це, ви зробите ваш код більш чистим, а також вам не доведеться конвертувати результат hs.get ("my_code") у рядок, оскільки за замовчуванням він повертає значення рядка, якщо під час введення зберігається значення як рядок.


1

Це ще один приклад того, як використовувати функції keySet (), get (), values ​​() та entrySet () для отримання ключів та значень на карті:

        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

Ви можете використовувати метод get (Object key) з HashMap. Пам’ятайте, що я дуже багато випадків, коли ваш Клас клавіш повинен замінити метод рівних, щоб бути корисним класом для ключа Map.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.