it-swarm.com.ru

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

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

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

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

146
user

Согласно Документация Oracle :

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

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

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

Как предположил Том Хоутинг, так лучше сделать:

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

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

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

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

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

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

class IndividualList extends ArrayList<Individual> {

}

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

IndividualList[] group = new IndividualList[10];
23
user2558221

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

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

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

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

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

15
smslce

Вы можете создать Array of 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);
10
Arjun Nagathankandy

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

6
Mark Odey

Это работает, массив 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 для некоторых кодов.

5
Rich

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

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

или если вам действительно нужен массив (ВНИМАНИЕ: плохой дизайн!):

 ArrayList[] group = new ArrayList[4];
3
Piotr Gwiazda
  1. Создание и инициализация

    Object[] yourArray = new Object[ARRAY_LENGTH];
    
  2. Доступ для записи

    yourArray[i]= someArrayList;
    

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

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

    чтобы прочитать элемент массива i в качестве приведения типа ArrayList:

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

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

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

List [] listArr = new ArrayList [4];

Выше строки выдает предупреждение, но оно работает (т.е. создает Array of ArrayList)

1
ashu17188

Чтобы объявить массив ArrayLists статически, скажем, для позиций Sprite в виде точек:

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 одного и того же типа.

1
Androidcoder

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

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

1
Tejendra

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

0
xiankun zhu
ArrayList<String> al[] = new ArrayList[n+1];
for(int i = 0;i<n;i++){
   al[i] = new ArrayList<String>();
}
0
HeadAndTail
ArrayList<String>[] lists = (ArrayList<String>[])new ArrayList[10]; 
0
Labeo

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

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

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

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

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

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

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