Java Ха sh Карта (несколько значений для 1 ключа) - PullRequest
0 голосов
/ 16 февраля 2020

как я могу добавить несколько значений к одному ключу в Ha sh Map?

HashMap<String, ArrayList<String>> phonebook = new HashMap<>();

Например, я хочу phonebook.put("Mike","123") phonebook.put("Mike","321") И затем я хочу получить все значения для ключа Майка.

Ответы [ 3 ]

2 голосов
/ 16 февраля 2020

Для этого вы можете использовать computeIfAbsent.

phonebook.computeIfAbsent("Mike", k -> new ArrayList<>()).add("123");
phonebook.computeIfAbsent("Mike", k -> new ArrayList<>()).add("321");

Что позволит избежать проверки, существует ли ключ перед вставкой, и если параллелизм имеет значение, то это будет операция atomi c.

1 голос
/ 16 февраля 2020

Вы не можете вставить значения в ArrayList таким образом, вам нужно сначала инициализировать их, а затем использовать add. Вы можете использовать computeIfAbsent для этого

public void addToList(HashMap<String, ArrayList<String>> phonebook, String key, String value) {
    phonebook.computeIfAbsent(key, k -> new ArrayList<>()).add(value);
}

HashMap<String, ArrayList<String>> phonebook = new HashMap<>();
addToList(phonebook, "Mike", "123");
addToList(phonebook, "Mike", "321");

Чтобы получить все значения, используйте get(), чтобы получить список

System.out.print(phonebook.get("Mike")); // [123, 321]

Или

for (String number: phonebook.get("Mike")) {
    System.out.println(number);
}

И чтобы получить все значения на карте

for (String key: phonebook.keySet()) {
    System.out.println(key + ": ");
    for (String number: phonebook.get(key)) {
        System.out.println(number);
    }
}
0 голосов
/ 16 февраля 2020

Вам не нужно заново изобретать колесо.

Java, встроенный MultivaluedHashMap

Spring's LinkedMultiValueMap

MulticaluedHashMap

Apache

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...