#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));
Вывод = «Привет, мир»