Создать массив элементов ArrayList <String> - PullRequest
30 голосов
/ 28 декабря 2010

Я хочу создать массив, содержащий элементы ArrayList .

Я пробовал

ArrayList<String> name[] = new ArrayList<String>()[];

, но, похоже, это не работает.

Ответы [ 12 ]

37 голосов
/ 28 декабря 2010

Вы не можете создать массив универсального типа.

Вместо этого вы можете создать ArrayList<ArrayList<String>>.

11 голосов
/ 28 декабря 2010

Правильный путь:

ArrayList<String> name[] = new ArrayList[9];

Однако это тоже не сработает, поскольку вы не можете создать массив с универсальным типом, то, что вы пытаетесь сделать, это матрица, иэто должно быть сделано так:

String name[][];
10 голосов
/ 27 августа 2014

Я знаю, что это немного устарело, но я собираюсь ответить на это в любом случае для будущих представлений.

Если вам действительно нужна структура ArrayList<String>[], вы можете просто создать класс, расширяющий ArrayList, и сделатьмассив этого класса:

public class StringArrayList extends ArrayList<String>{}

А в вашей реализации:

ArrayList<String> name[] = new StringArrayList[9];

Вот пример:

package testspace.arrays;

import java.util.List;

public class TestStringArray {

    public static void main(String[] args) {
        List<String>[] arr = new StringArrayList[10];
        for(int i = 0; i < arr.length; i++){
            // CANNOT use generic 'new ArrayList<String>()'
            arr[i] = new StringArrayList(); 
            for(int j = 0; j < arr.length; j++){
                arr[i].add("list item #(" + j + "|" + i + ")");
            }
        }

        StringBuilder sb = new StringBuilder();
        for(final List<String> list : arr){
            for(final String str : list){
                sb.append(str + " ");
            }
            sb.append("\n");
        }
        System.out.println(sb.toString());
    }

}

ПРИМЕЧАНИЕ Вы получите ошибку времени выполнения, если будете использовать вместо этого: arr[i] = new ArrayList<String>()

5 голосов
/ 29 декабря 2010

Это неправильный ОО, и этот вид кода тесно связан с реализацией.Если вам нужно сделать такую ​​вещь, возможно, вы сделали что-то не так.Если код не ваш, то человек, который его сделал, вероятно, сделал что-то не так.

Если вы знаете, сколько там элементов (или даже нет), почему бы не использовать Map<Integer,List<String>>?

2 голосов
/ 29 декабря 2010

Если вам нужен массив ArrayList, вам придется инициализировать каждую позицию массива индивидуально:

int size = 9; // 9 is just an example
// you can remove the annotation, but you'll be warned:
// Type safety: The expression of type ArrayList[] needs unchecked conversion 
// to conform to ArrayList<String>[]
@SuppressWarnings("unchecked")
ArrayList<String> name[] = new ArrayList[ size];
for( int i = 0; i < size; i++) {
    name[ i] = new ArrayList<String>();
}
2 голосов
/ 28 декабря 2010
ArrayList<ArrayList<String>> name= new ArrayList<ArrayList<String>>(/*capacity*/);
0 голосов
/ 10 июня 2018

Есть способ сделать это с небольшой модификацией вашего кода.

ArrayList<String>[] name = new ArrayList[10]; 

Это даст вам массив ArrayList.

0 голосов
/ 09 марта 2018

Массив ArrayLists, пример с Loops

//Declare
Object[] arrayLists = new Object[size];    

//Fill
for (int j=0; j < size; j++) {
     arrayLists[k]= generateAnArrayList(j);  //or whatnot
}

//Usage
for (int j=0; j < size; j++) {
    ArrayList<Long> al = (ArrayList<Long>) arrayLists[j];
    //do something here
}
0 голосов
/ 09 октября 2017
// This is the not correct way
ArrayList<String> name[] = new ArrayList<String>()[];

// This is the correct way
ArrayList<String> list[] = new ArrayList[2];

list[0] = new ArrayList();
list[1] = new ArrayList();

list[0].add("Some String 11");
list[0].add("Some String 22");

list[1].add("Some String 1111");
list[1].add("Some String 2222");
0 голосов
/ 27 августа 2017

Вы можете попробовать это:

ArrayList[] arr=new ArrayList[5];
for(int i=0;i<5;i++)
     arr[i]=new ArrayList<String>();
arr[1].add("35");
arr[1].add("ME");
arr[1].add("HELLO");
System.out.println(arr[1]);

Вывод:

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