#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 она есть.
Здесь приведены вводные сведения о том, как использовать ее в вашей сборке.