Подтвердить что ты не робот

Возвращение примитивного массива после вставки в ArrayList примитивных массивов в Java

List<double[]> x = new ArrayList<double[]>();
x.add(new double[]={1,2,3,4,54,6});  

элементы 1,2,3,4,54,6 добавляются к x

x.get(0) ---> returns 1

Но как это сделать, добавляется адрес массива? почему

     List<double[]> x = new ArrayList<double[]>();
    double[] name=new double[5];
    name[0]=1
    name[1]=3;
    name[2]=3;
        .
        . 
        . 
        .
    x.add(name);
    getting x.get(0) ---> returns @as12cd2 (address of the array)
4b9b3361

Ответ 1

Это связано с тем, что List состоит из double[] вместо double.

Поскольку a double[] - это массив, вы должны также указать позицию из этого массива. Например:

x.get(0)[0]

Если вы хотите просто использовать x.get(), ваш List должен состоять из примитивов double. Затем вы можете добавить массив doubles к List с помощью отдельного метода (я не знаю одного из встроенных):

List<Double> addArray(List<Double> o, double[] a) {
  for(Double d : a)
    o.add(d);

  return o;
}

Надеюсь, это имеет смысл. Мне нравится использовать короткие имена переменных, чтобы сделать логику более ясной. Пока вы знаете, что такое переменные, вы должны быть в порядке.

Ответ 2

Если вы просто хотите, чтобы ваш список сохранял дубликаты вместо массивов двойников, измените то, что хранится в списке

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

Затем вы можете добавить массив в список в список массивов, который будет означать, что список хранит значения, а не массив. Это даст вам поведение, которое get(0) даст вам 1, а не адрес массива

Double[] doubleArray = {1.0, 2.0, 3.0, 4.0, 54.0, 6.0 };
doubleList.addAll(Arrays.asList(doubleArray));
doubleList.get(0); //gives 1.0

Ответ 3

double[] массив - это объект. Итак, вы получаете адрес и весь массив добавляется в индекс 0.

Вы можете использовать Arrays.toString(x.get(0)) для получения читаемой печати массива.

toString() для массива должен печатать [, за которым следует символ, представляющий тип данных элементов массива, за которым следует @, а затем адрес памяти.

Ответ 4

Реализация по умолчанию toString() любого Object (включая double[]) - это возврат адреса объекта. Это то, что печатается вашим кодом.