Как правильно в java реализовать словарь: "ключ" : "n-значений"?

Пользователь

от ottilie.farrell , в категории: Java , 7 месяцев назад

Как правильно в java реализовать словарь: "ключ" : "n-значений"?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от willis.streich , 6 месяцев назад

@ottilie.farrell 

В Java можно реализовать словарь с одним ключом, который будет соответствовать нескольким значениям, используя класс Map из пакета java.util. Одним из вариантов является использование класса HashMap.


Вот пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Dictionary {
    private Map<String, List<String>> dictionary;

    public Dictionary() {
        dictionary = new HashMap<>();
    }

    public void addValue(String key, String value) {
        if (dictionary.containsKey(key)) {
            List<String> values = dictionary.get(key);
            values.add(value);
        } else {
            List<String> values = new ArrayList<>();
            values.add(value);
            dictionary.put(key, values);
        }
    }

    public List<String> getValues(String key) {
        return dictionary.get(key);
    }

    public static void main(String[] args) {
        Dictionary dictionary = new Dictionary();
        dictionary.addValue("key1", "value1");
        dictionary.addValue("key2", "value2");
        dictionary.addValue("key1", "value3");

        List<String> valuesForKey1 = dictionary.getValues("key1");
        for (String value : valuesForKey1) {
            System.out.println(value);
        }
        // Output: value1, value3

        List<String> valuesForKey2 = dictionary.getValues("key2");
        for (String value : valuesForKey2) {
            System.out.println(value);
        }
        // Output: value2
    }
}


В данном примере класс Dictionary содержит методы addValue для добавления значения по ключу, getValues для получения всех значений по ключу. При добавлении значения по ключу, если ключ уже существует в словаре, то значение добавляется в список значений, в противном случае создается новая запись в словаре с данным ключом и добавляется первое значение.


В методе main создается экземпляр класса Dictionary, добавляются значения по ключу и выводятся все значения по определенному ключу.

Пользователь

от nelle , 2 месяца назад

@ottilie.farrell 

Прекрасное объяснение! В этом примере использована структура данных HashMap для хранения значений по ключам. Кроме того, при добавлении значения по ключу происходит проверка наличия ключа в словаре, и если он уже существует, то значение добавляется в список для данного ключа.


Небольшое уточнение: в коде необходимо также импортировать класс ArrayList из пакета java.util, чтобы можно было использовать List для хранения значений по ключу.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Dictionary {
    private Map<String, List<String>> dictionary;

    public Dictionary() {
        dictionary = new HashMap<>();
    }

    public void addValue(String key, String value) {
        if (dictionary.containsKey(key)) {
            List<String> values = dictionary.get(key);
            values.add(value);
        } else {
            List<String> values = new ArrayList<>();
            values.add(value);
            dictionary.put(key, values);
        }
    }

    public List<String> getValues(String key) {
        return dictionary.get(key);
    }

    public static void main(String[] args) {
        Dictionary dictionary = new Dictionary();
        dictionary.addValue("key1", "value1");
        dictionary.addValue("key2", "value2");
        dictionary.addValue("key1", "value3");

        List<String> valuesForKey1 = dictionary.getValues("key1");
        for (String value : valuesForKey1) {
            System.out.println(value);
        }
        // Output: value1, value3

        List<String> valuesForKey2 = dictionary.getValues("key2");
        for (String value : valuesForKey2) {
            System.out.println(value);
        }
        // Output: value2
    }
}


Этот код позволяет хранить несколько значений для одного ключа и получать все значения по ключу. Он также демонстрирует простой способ использования класса Dictionary для создания и управления словарем с множественными значениями.