2015-05-21 4 views
1

У меня есть этот массив: ArrayList<ArrayList<Integer>> items = new ArrayList<ArrayList<Integer>>(); Java - Как добавить элементы на многомерном массиве?

Я хочу, чтобы создать этот массив на for такт и результат должен быть что-то вроде:

[0]: {0 , 0, 0, 3}; 
[1]: {1 , 2, 3, 3}; 
[2]: {6 , 2, 5, 4}; 

В такт, новые значения должны быть добавлены в ArrayList в определенном index. index может содержать значения или нет, но они не должны быть перезаписаны.

Могу ли я добавить только массивы к определенному index, как items.add(index, array);?

Итак, как добавить больше значений, не перезаписывая ничего?

ответ

0

Из того, что я понял, на каждой итерации вашего цикла у вас будет индекс и целое число. Вы хотите вставить целое число в ArrayList по указанному индексу, если он существует. Или вы перебираете двумерный массив?

Рассмотрите возможность использования HashMap где ключ индекс (целое число), а значение является ArrayList:

HashMap<Integer, ArrayList<Integer>> items = new HashMap<>(); 

// Given an index, i, and an integer, n 
// (e.g. obtained while looping over your data): 

if (items.containsKey(i)){ 
    // Your HasMap contains an ArrayList at this index/key 
    // Add the number to the end of the list 

    items.get(i).add(n); 

} else { 
    // There is no ArrayList stored yet at this index/key 
    // Create a new list containing only the number 

    ArrayList<Integer> list = new ArrayList<>(); 
    list.add(n); 

    items.put(i, list); 
} 
0

items.get(i).add(j);

где i и j целые числа.

+0

Это работает, даже если индекс не существует? (при первом добавлении) – Christopher

+0

Нет, вам нужно создать его сначала, добавив пустой ArrayList –

1

Лучшее решение заключается в использовании HashMap, как это:

HashMap<Integer, int[]> items = new HashMap<Integer, int[]>(); 

items.put(0, new int[] {0 , 0, 0, 3}); 
items.put(1, new int[] {1 , 2, 3, 3}); 
items.put(2, new int[] {6 , 2, 5, 4}); 

Затем вы можете установить и получить любое значение в любой момент ключа, даже если ключ еще не существует.

Вы можете использовать sipmly:

int[] row = items.get(0); 

, чтобы получить нужную строку.

1

Если я правильно понял, вы пытаетесь добавить целые целые массивы в ArrayList>. В этом случае вы можете попробовать что-то вроде:

ArrayList<ArrayList<Integer>> items = new ArrayList<ArrayList<Integer>>(); 
    Integer[] intList1 = {0,0,0,3}; 
    Integer[] intList2 = {1,2,3,3}; 
    Integer[] intList3 = {6,2,5,4}; 
    items.add(new ArrayList<Integer>(Arrays.asList(intList1))); 
    items.add(new ArrayList<Integer>(Arrays.asList(intList2))); 
    items.add(new ArrayList<Integer>(Arrays.asList(intList3))); 

Или эти Int массивы могут быть добавлены в ArrayList в цикле, а не по отдельности.