Создать массив Arraylists

Я хочу создать массив arraylist, как показано ниже:

ArrayList<Individual>[] group = new ArrayList<Individual>()[4]

Но это не компиляция. Как я могу это сделать?

Ответ 1

По Документация Oracle:

"Вы не можете создавать массивы параметризованных типов"

Вместо этого вы можете сделать:

ArrayList<ArrayList<Individual>> group = new ArrayList<ArrayList<Individual>>(4);

Как было предложено Tom Hawting - tackline, это даже лучше сделать:

List<List<Individual>> group = new ArrayList<List<Individual>>(4);

Ответ 2

Как уже упоминалось, вероятно, лучше использовать другой список для хранения ArrayList, но если вам нужно использовать массив:

ArrayList<Individual>[] group = (ArrayList<Individual>[])new ArrayList[4];

Ответ 3

Это работает:

ArrayList<String>[] group = new ArrayList[4];

Ответ 4

Вы можете создать класс, расширяющий ArrayList

class IndividualList extends ArrayList<Individual> {

}

а затем создайте массив

IndividualList[] group = new IndividualList[10];

Ответ 5

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

Что делать, если мне нужно индексировать n разных arraylists.

С объявлением List<List<Integer>> мне нужно создать объекты n ArrayList<Integer> вручную или поместить цикл for для создания списков n или каким-либо другим способом, в любом случае всегда будет моей обязанностью создавать n списки.

Разве это не здорово, если объявить его кастом как List<Integer>[] = (List<Integer>[]) new List<?>[somenumber]. Я считаю, что это хороший дизайн, когда самому не нужно создавать весь объект индексирования (arraylists)

Может кто-нибудь просветить меня, почему это (arrayform) будет плохой дизайн и каковы его недостатки?

Ответ 6

Вы можете создать массив ArrayList

List<Integer>[] outer = new List[number];
for (int i = 0; i < number; i++) {
    outer[i] = new ArrayList<>();
}

Это будет полезно в таких сценариях, как это. Вы знаете размер внешнего. Но размер внутренних меняется. Здесь вы можете создать массив фиксированной длины, который содержит изменяющиеся по размеру списки массивов. Надеюсь, это будет полезно для вас.

В Java 8 и выше вы можете сделать это гораздо лучше.

List<Integer>[] outer = new List[number];
Arrays.setAll(outer, element -> new ArrayList<>());

Еще лучше использовать ссылку на метод

List<Integer>[] outer = new List[10];
Arrays.setAll(outer,  ArrayList :: new);

Ответ 7

Проблема с этой ситуацией заключается в использовании arraylist, вы получаете временную сложность o (n) для добавления в определенной позиции. Если вы используете массив, вы создаете ячейку памяти, объявляя ваш массив, поэтому он постоянно

Ответ 8

Это работает массив ArrayList. Попробуйте понять, как это работает.

import java.util.*;

public class ArrayOfArrayList {
    public static void main(String[] args) {

        // Put the length of the array you need
        ArrayList<String>[] group = new ArrayList[15];
        for (int x = 0; x < group.length; x++) {
            group[x] = new ArrayList<>();
        }

        //Add some thing to first array
        group[0].add("Some");
        group[0].add("Code");

        //Add some thing to Secondarray
        group[1].add("In here");

        //Try to output 'em
        System.out.println(group[0]);
        System.out.println(group[1]);
    }
}

Кредиты для Kelvincer для некоторых кодов.

Ответ 9

Вы не можете создать массив родового типа. Создать список массивов:

 List<ArrayList<Individual>> group = new ArrayList<ArrayList<Individual>>();

или если вам действительно нужен массив (ПРЕДУПРЕЖДЕНИЕ: плохой дизайн!):

 ArrayList[] group = new ArrayList[4];

Ответ 10

  • Создание и инициализация

    Object[] yourArray = new Object[ARRAY_LENGTH];
    
  • Доступ к записи

    yourArray[i]= someArrayList;
    

    для доступа к элементам внутреннего ArrayList:

    ((ArrayList<YourType>) yourArray[i]).add(elementOfYourType); //or other method
    
  • Доступ для чтения

    для чтения элемента массива я в качестве литья типа использования ArrayList:

    someElement= (ArrayList<YourType>) yourArray[i];
    

    для элемента массива i: для чтения элемента ArrayList при индексе j

    arrayListElement= ((ArrayList<YourType>) yourArray[i]).get(j);
    

Ответ 11

Чтобы объявить массив ArrayLists статически, например, для спрайтов в виде точек:

ArrayList<Point>[] positionList = new ArrayList[2];

public Main(---) {
    positionList[0] = new ArrayList<Point>(); // Important, or you will get a NullPointerException at runtime
    positionList[1] = new ArrayList<Point>();
}

динамически:

ArrayList<Point>[] positionList;
int numberOfLists;

public Main(---) {
    numberOfLists = 2;
    positionList = new ArrayList[numberOfLists];
    for(int i = 0; i < numberOfLists; i++) {
        positionList[i] = new ArrayList<Point>();
    }
}

Несмотря на предостережения и некоторые сложные предложения здесь, я нашел массив ArrayLists как элегантное решение для представления связанных ArrayLists того же типа.

Ответ 12

Вы можете создать как это  ArrayList<Individual>[] group = (ArrayList<Individual>[])new ArrayList[4];

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

Ответ 13

Я считаю, что это проще в использовании...

static ArrayList<Individual> group[];
......
void initializeGroup(int size)
{
 group=new ArrayList[size];
 for(int i=0;i<size;i++)
 {
  group[i]=new ArrayList<Individual>();
 }

Ответ 14

ArrayList<String>[] lists = (ArrayList<String>[])new ArrayList[10]; 

Ответ 15

Вы можете сделать это:

//Создаем массив типа ArrayList

`ArrayList<Integer>[] a = new ArrayList[n];`

//Для каждого элемента массива make ArrayList

for(int i=0; i<n; i++){ 
    a[i] = new ArrayList<Integer>();
}

Ответ 16

Список [] listArr = новый ArrayList [4];

Над строкой выдает предупреждение, но он работает (т.е. Создает массив ArrayList)

Ответ 17

ArrayList<String> al[] = new ArrayList[n+1];
for(int i = 0;i<n;i++){
   al[i] = new ArrayList<String>();
}

Ответ 18

ArrayList<Integer>[] graph = new ArrayList[numCourses] Он работает.

Ответ 19

вы можете создать список [] и инициализировать их для цикла. он компилируется без ошибок:

List<e>[] l;
for(int i = 0; i < l.length; i++){
    l[i] = new ArrayList<e>();
}

он также работает с arrayList [] l.