Существуют ли эффективные 2D классы ArrayList для Java? - PullRequest
6 голосов
/ 11 марта 2011

Я знаю, что возможно создать 2D ArrayList с ArrayList<ArrayList<E>>, но это громоздкий и настоящий кошмар каста, когда дело доходит до добавления и извлечения объектов.

Существуют ли классы 2D ArrayList, которые делают такие вещи более эффективно? Я пишу настоящий 2D класс ArrayList с нуля, и мне интересно, есть ли еще кто-нибудь, кто сделал бы это эффективно.

Ответы [ 5 ]

5 голосов
/ 11 марта 2011

нет, к сожалению, нет 2d класса ArrayList. ваши альтернативные варианты (в случае, если 0/1/2 из Diamension является постоянным):

MyType[][] myList = new MyType[n][m];

или

ArrayList<MyType>[] myList = new ArrayList<MyType>[n];

или

ArrayList<ArrayList<MyType>> myList = new ArrayList<ArrayList<MyType>>();

другой вариант - сохранить все ваши данные в 1d ArrayList и создать функцию, которая получает (x, y) и возвращает место x в ArrayList. таким образом вы демонстрируете вне 2d массива, но легко сохраняете элементы в 1d ArrayList

1 голос
/ 11 марта 2011

Посмотрите FastTable в javolution и Table реализации в guava

1 голос
/ 11 марта 2011

Использование подхода типа «ArrayList>» прекрасно и довольно стандартно для такого рода вещей из того, что я видел.Вы можете легко написать класс списка двумерных массивов, который предоставляет удобные методы для добавления / удаления элементов и т. Д., И это будет далеко не "громоздким" или "кошмарным кастом" для использования этого.Взгляните на эту реализацию в качестве примера.Это не совсем идеально, но это показывает, насколько легко использовать такой подход.

0 голосов
/ 19 апреля 2013

Я построил трехмерную «сеточную» структуру данных, если это поможет.

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

Вы можете использовать его как 2D-коллекцию, если хотите, игнорируя измерение z (держа его на 0), хотя это, вероятно, немного излишне.Тем не менее, вариант, если вы хотите такую ​​структуру.Кроме того, вы можете упростить его до 2D.

0 голосов
/ 11 марта 2011

В Google Collections есть коллекция таблиц. Он представлен в виде строк / колов и доступен напрямую, bycol и по строкам. Различные реализации Таблицы имеют различную эффективность в зависимости от типа доступа

...