Как реализовать вектор массивов в Java? - PullRequest
1 голос
/ 05 октября 2011

Я хочу, чтобы в Java была структура с изменяемыми размерами, позволяющая хранить один размерный массив или вектор типа double.Какой лучший способ сделать?

Можно ли передать массив в качестве параметра Arraylist?Может быть к вектору?

Если нет, то что является вполне разумным решением?

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

Ответы [ 7 ]

5 голосов
/ 05 октября 2011

Вы можете использовать ArrayList , однако вы можете обнаружить, что TDoubleArrayList более эффективен, так как при этом используется double[]

2 голосов
/ 05 октября 2011

С помощью шаблонов вы можете передать любой type, который является подклассом java.lang.Object. (примитивные типы Java не являются подклассом java.lang.Objec t)

ArrayList<ArrayList<Double>> doubles=new ArrayList<ArrayList<Double>>();
//or
Vector<Double> doubles=new ArrayList<Double>();

и, конечно, вы можете передать объект массива.

ArrayList<String[]> obj=new ArrayList<String[]>();
1 голос
/ 05 октября 2011

Я бы, вероятно, использовал ListMultmap

ListMultimap<Integer, Double> listOfLists;

Целочисленным ключом был бы ваш индекс (0, 1, 2 и т. Д.).Эта структура заботится о создании внутренних списков для вас.Он проверит, существует ли список по индексу, и при необходимости создаст его перед вставкой.

1 голос
/ 05 октября 2011

Создайте ArrayList, содержащий ссылки на другие ArrayList, например:

List<List<Double>> listOfLists = new ArrayList<List<Double>>();

List<Double> doubleList = new ArrayList<Double>();

listOfLists.add(doubleList);

Не следует создавать список массивов, поскольку коллекции и массивы не очень хорошо сочетаются.

EDIT

Вектор эффективно устарел. Вместо этого используйте ArrayList.

0 голосов
/ 05 октября 2011

Массивы Java являются объектами, поэтому везде, где вы можете передать Object, вы можете передать массив. ArrayList идеально подходит для построения упорядоченной последовательности массивов; не используйте Vector, если у вас нет старого API, для которого вы кодируете (или вам нужен точный тип синхронизации, реализованный им; вы, вероятно, этого не хотите).

Внутренне ArrayList содержит массив Object ссылок.

Если вы делаете прямоугольные матрицы или разреженные массивы, могут быть более эффективные способы реализации вещей. Матрицы несут меньшую нагрузку, если реализованы с одним массивом, а не с массивом массивов (или, что еще хуже, ArrayList из ArrayList с), но вам нужно больше работать, чтобы скрыть этот факт. Разреженные массивы лучше сделать как вариант для Map (сам по себе довольно затратный процесс, но вы экономите, если не используете много памяти).

0 голосов
/ 05 октября 2011

Возможно иметь List<List<Double>> или List<Double[]>.

Вы должны использовать более современный List/ArrayList вместо Vector.

Наиболее эффективный выбор зависит от того, что именно вы хотите с ним делать, но сначала вам следует рассмотреть реализации интерфейса List

0 голосов
/ 05 октября 2011

Это для матриц?Если это так, посмотрите на JAMA или CERN Colt , вместо того, чтобы пытаться бросить свой собственный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...