Что это за структура данных, которая работает как массив, но автоматически увеличивается во 2-е измерение при задании нескольких значений под одним индексом?

#java #arrays #arraylist

#java #массивы #arraylist

Вопрос:

Я помню эту структуру данных, которая работает на основе индексов, как в массиве или списке. Однако, если вы помещаете несколько значений под один и тот же индекс, этот индекс превращается в связанный список. Таким образом, при добавлении новых элементов в тот же индекс связанный список будет расти автоматически.

Я предполагаю, что это не просто 2D-массив. Также я слышал, что можно создать массив связанных списков, но я все еще сомневаюсь, что это то, что меня интересует.

Кроме того, я предполагаю, что это похоже на некоторую структуру данных из коллекции Java, потому что я помню, что видел какой-то код на Java, содержащий эту структуру, но забыл ее название.

Может кто-нибудь подсказать, что это может быть? Или такая структура данных вообще существует? Спасибо

Комментарии:

1. Для меня звучит как хэш-таблица.

2. «Также я слышал, что можно создать массив связанных списков, но я все еще сомневаюсь, что это то, что меня интересует.» — похоже, это именно то, что вас интересует. Маловероятно, что записи «превратились» в списки. Для меня это больше похоже на реализацию с несколькими картами.

3. Какую проблему вы пытаетесь решить с помощью этой структуры данных?

Ответ №1:

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

Один из способов сделать это — использовать HashMap of Integer as key и LinkedList as value .

Вот пример:

 public class IndexMap {
    Map<Integer, LinkedList<Integer>> map;
    public IndexMap(){
         map = new HashMap<Integer, LinkedList<Integer>>();
    }
    public void add(int index, int value) {
        if(map.containsKey(index)) {
            map.get(index).add(value);
        }else {
            LinkedList<Integer> list = new LinkedList<>();
            list.add(value);
            map.put(index, list);
        }
    }
    public void remove(int index, int value) {
        if(map.containsKey(index))
            map.get(index).remove(new Integer(value));
    }
    @Override
    public String toString() {
        return map.toString();
    }
    public static void main(String[] args) {
        IndexMap map = new IndexMap();
        map.add(0,0);
        map.add(0,1);
        map.add(1,0);
        map.add(2,0);
        map.add(2,1);
        System.out.println(map);
        map.remove(0,1);
        System.out.println(map);
    }

}
  

Пример демонстрации:

 {0=[0, 1], 1=[0], 2=[0, 1]}
{0=[0], 1=[0], 2=[0, 1]}
  

Вы можете изменить методы или добавить новые, чтобы реализовать больше функциональных возможностей.

Ответ №2:

Вы, вероятно, думаете о multimap. Хотя в базовой Java нет реализации, в Google guava она есть.

Здесь приведены вводные сведения о том, как использовать ее в вашей сборке.