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

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

155 голосов
/ 19 декабря 2011

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

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

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

Ответы [ 19 ]

130 голосов
/ 19 декабря 2011

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

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

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

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

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

List<List<Individual>> group = new ArrayList<List<Individual>>(4);
87 голосов
/ 19 декабря 2011

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

ArrayList<Individual>[] group = (ArrayList<Individual>[])new ArrayList[4];
73 голосов
/ 18 февраля 2015

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

ArrayList<String>[] group = new ArrayList[4];
23 голосов
/ 07 июля 2013

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

class IndividualList extends ArrayList<Individual> {

}

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

IndividualList[] group = new IndividualList[10];
17 голосов
/ 14 марта 2015

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

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

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

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

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

13 голосов
/ 27 апреля 2016

Вы можете создать 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);
6 голосов
/ 22 июня 2013

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

5 голосов
/ 22 мая 2015

Это работает, массив 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]);
    }
}

Кредиты Кельвинчеру за некоторые коды.

3 голосов
/ 19 декабря 2011

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

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

или если вам ДЕЙСТВИТЕЛЬНО нужен массив (ВНИМАНИЕ: плохой дизайн!):

 ArrayList[] group = new ArrayList[4];
2 голосов
/ 26 марта 2014
  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);
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...