Как установить 2d-вектор по идентификаторам X, Y, как в 2dArray?

#java

#java

Вопрос:

Учитывая 2dArray, я могу напрямую установить любой элемент, указав индекс X, Y как таковой:

 2dArray[row][col] = "hello";
 

Как я могу выполнить то же самое с 2D-вектором или 2D ArrayList? Похоже, мне нужно будет воссоздать весь вектор столбца, если я хочу изменить какой-либо элемент внутри него, а затем сбросить этот вектор столбца в строку.

Я работаю над простой игрой на основе плиток, поэтому возможность прямого получения / установки по индексу X, Y довольно удобна.

Мысли? Спасибо за любые идеи

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

1. Почему arraylist или вектор? Для игры на основе плиток ваш подход с 2d-массивом кажется мне правильным. Помните, что удаление и вставка в середину ArrayList обходится довольно дорого ( O(n) если я правильно помню). В массиве это O(1)

2. @Atmocreations Списки массивов поддерживаются массивами.

3. @Atmocreations Это O(n) как для ArrayList, так и для Array. Вы, вероятно, думаете о LinkedList, который есть O(1) (поскольку каждое удаление / добавление требует постоянного количества изменений ссылок).

Ответ №1:

Если ваш список является List<List<T>> then, list.get(x).set(y, elem) get(x) идентифицирует строку, затем set(y, elem) устанавливает y-й элемент строки (который находится в y-м столбце) в elem

Ответ №2:

вы могли бы создать для него класс.

 import java.util.LinkedList;
import java.util.List;

public class AClass<T>
{
    public Store2D()
    {
        coords = new LinkedList<List<T>>();
    }
    public void set(int x, int y, T value)
    {
        coords.get(x).set(y, value);
    }
    public T get(int x, int y)
    {
        return coords.get(x).get(y);
    }
    List<List<T>> coords;
}
 

Затем использовать его:

 AClass<String> vector = new AClass<String>();

AClass.set(13, 17, "Hello");
AClass.set(17, 13, "World");
System.out.println(AClass.get(13, 17) " " AClass.get(17, 13));
 

Вывод = «Привет, мир»