Общий тип для Arraylist of Arraylists - PullRequest
8 голосов
/ 29 февраля 2012

При обычной инициализации списка массивов мы использовали определение универсального типа следующим образом:

List<String> list1 = new ArrayList<String>();

Но в случае ArrayList из ArrayLists, как мы можем определить его универсальный тип?

код для списка массивов списков массивов выглядит следующим образом:

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

Просто поделитесь синтаксисом, если кто-нибудь имеет представление об этом ..!

Ответы [ 5 ]

12 голосов
/ 29 февраля 2012

Вы можете просто сделать

List<List<String>> l = new ArrayList<List<String>>();

Если вам нужен массив списков, вы можете сделать

List<String>[] l = new List[n];

и безопасно игнорировать или подавлять предупреждение.

4 голосов
/ 29 февраля 2012

Если вы (действительно) хотите получить список списков, тогда это правильное объявление:

List<List<String>> listOfLists = new ArrayList<List<String>>();

Мы не можем создавать универсальные массивы. new List<String>[0] - ошибка компиляции.

0 голосов
/ 29 февраля 2012

Вы правы: это выглядит безумно.(Может быть, это ошибка ...) Вместо использования

ArrayList<String>[] lst = new ArrayList<String>[]{};

Использование:

ArrayList<String>[] list1 = new ArrayList[]{};

будет работать для объявления, даже если вы не описываете конкретный универсальный шаблон!

0 голосов
/ 29 февраля 2012

Вы говорите о массиве списков (точнее, ArrayLists).Java не позволяет генерировать универсальные массивы (кроме случаев использования подстановочных знаков, см. Следующий абзац).Так что вам следует либо забыть об использовании универсальных шаблонов для массива, либо использовать список вместо массива (для этого предложено много решений).

Цитата из Статья IBM :

Еще одно следствие того факта, что массивы являются ковариантными, но не универсальными, является то, что вы не можете создать экземпляр массива универсального типа (новый List [3] недопустим), если аргумент типа не является неограниченным подстановочным знаком (новый List <?> [3] является законным).

0 голосов
/ 29 февраля 2012

Примерно так:

List<List<Number>> matrix = new ArrayList<List<Number>>();
for (int i = 0; i < numRows; ++i) {
    List<Number> row = new ArrayList<Number>();
    // add some values into the row
    matrix.add(row);
}

Сделайте тип внутреннего Списка чем угодно; это только для иллюстрации.

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