2016-06-30 4 views
0

Можно ли вставить массив в массив и прочитать его впоследствии в Java? Что-то вроде этого:Вставить int Array в ArrayList

ArrayList<Integer> array = new ArrayList<>(); 
array.add([1,4,5]); 
array.add([3,7,2]); 

Массив:

{ [1,4,5], [3,7,2] } 

И читать как:

print(array[0][1]); //prints 4 

Спасибо.

+0

Не напрямую, но это не требуется много (IMO), чтобы написать код для него – ControlAltDel

+0

arraylist - это список, а не массив. они разные. вы можете создать массив 2d – CSK

+1

Я не могу представить какой-либо разумный Java-код, который будет печатать 4 в [1] [2], когда добавляются массивы, которые вы показали (даже если вы используете некоторый массив массивов 2d, например массив массивов) –

ответ

4

Вы можете написать ArrayList<int[]> и передать значения, такие как .add(new int[]{...}).

Например,

List<int[]> list = new ArrayList<>(); 
list.add(new int[]{1, 2, 3}); 

Для печати значений, что Вы должны получить int[] массив во-первых, get(int index) и затем получить значение из этого массива с помощью [index]:

System.out.print(list.get(0)[0]); // prints 1 

О беспорядок в комментариях.

  1. Здесь нет сырых типов. Я не писал, например, List или List<Object> в любом месте.
  2. int[] - массив, поэтому он является ссылочным типом и может использоваться как общий параметр.
  3. int - это примитив, который не работает/не используется с дженериками. Рассмотрим его класс оболочки - Integer.
  4. Я использовал алмаз <> выше. Зачем? Чтобы предотвратить «шаблонный код».

В Java SE 7, а затем, вы можете заменить аргументы типа, необходимые для вызова конструктора обобщенного класса с пустым набором аргументов типа (<>) до тех пор, как компилятор может определить, или вывод , аргументы типа из контекста. Эта пара угловых кронштейнов, <>, неофициально называется алмазом.
List<int[]> list = new ArrayList<>();
List<int[]> list = new ArrayList<int[]>(); эквивалентно предыдущему

+4

@Berdesdan Я думаю, вы смешиваете условия. 'int 'является примитивным типом, а не сырым типом. –

+0

исправил ваш -1, я иногда не получаю это сообщество. ваш ответ полностью прекрасен –

+0

@SotiriosDelimanolis spot on - «Необработанный тип - это имя общего класса или интерфейса без каких-либо аргументов типа» – Jeutnarg

0

ArrayList является тип списка.

Если вы хотите создать 2d массив (массив внутри массива)

int[][] a = new int[][]{{1,4,5},{3,7,2}}; 
System.out.println(a[0][1]); 
1

Вы можете добавить целые массивы к arraylist, но тогда ArrayList должен быть определен как:

List<int[]> list = new ArrayList<int[]>(); 

В Факт более общей версии будет:

List<Object> list = new ArrayList<Object>(); 

array.add([1,4,5]); в реализован правильно в

list.add(new int[]{1,4,5});

print(array[1][2]); является реализован правильно как:

System.out.println(((int [])list.get(1))[2]); 
+0

Почему вы используете более общую версию, если знаете, что int [] - тип, который вы хотите использовать? – lucasvw

+0

Я никогда не говорил, что вы должны использовать его, я просто хотел, чтобы OP знал об этом. –

+0

Но если что-нибудь, это просто путает OP больше. ИМО это забивает ваш ответ, но это не имеет большого значения. – lucasvw

0

Вы хотите использовать ArrayList из ArrayLists

ArrayList<ArrayList<Integer>> intArrays = new ArrayList<ArrayList<Integer>>(); 
    //rows 
    for(int i =0;i<4;i++) 
    { 

     intArrays.add(new ArrayList<Integer>()); 
     //cols 
     for(int j=0;j<4;j++) 
     { 
      intArrays.get(i).add(j); 
     } 
    } 
    //rows 
    for(int i =0;i<4;i++) 
    { 

     //cols 
     for(int j=0;j<4;j++) 
     { 
      System.out.print(intArrays.get(i).get(j)); 
     } 
     System.out.println(); 
    }