2013-03-26 3 views
-5
public class XXXX{ 
    private List<Integer>[] a; 
    public XXXX(int num) 
    { 
     a = new ....? 
    } 
} 

Как я должен НОВО ?как новый список <Integer> [] в Java

+7

Массивы и дженерики не идут хорошо вместе. – NPE

+0

Что такое? это массив списка

+0

Зачем вам нужна такая конструкция? (кроме вопроса интервью или экзамена ...) – ppeterka

ответ

0
a = (List<Integer>[]) new List[num]; 
for(int i = 0; i < num; i++) 
    a[i] = new ArrayList<Integer>(); 

Действительно, хотя, почему бы не объявить a как List<List<Integer>>?

+0

@ppeterka: Исправлено – Eric

-3

Список - это интерфейс в java!

вы можете дать ссылки экземпляров как ArrayList, список linket, вектор и стек переменной со списком типов данных

так что вы можете использовать один из следующих вариантов,

a = new ArrayList<Integer>(); 
a = new LinkedList<Integer>(); 
a = new Vector()<Integer>; 
a = new Stack()<Integer>; 
+1

Посмотрите внимательно на вопрос. 'a' является ** массивом ** списков.Java не позволяет создавать массив параметризованного типа. – Jesper

+0

да вы правая яшма! я не наблюдал остро! –

+2

А что с синтаксисом на последних двух? – ppeterka

4

NPE: «Массивы и дженерики не идут хорошо вместе»

перейти к списку списков

List<List<Integer>> a = new ArrayList<List<Integer>>(); 

или двойной массив

int[][] a = new int[5][5]; 
1

Это работает

int arraySize = 10; 
List<Integer>[] a = (List<Integer>[]) new List[arraySize]; 

Это создает массив (размером 10), которые могут содержит Список Integer

+0

Не утруждайте себя чтением первоначальных комментариев, поскольку они ссылаются на неправильную ссылку, и люди спрашивают, почему почему. Это сработало отлично, простой вопрос и простой ответ. Я группировал четыре списка вместе, и массив был идеальным выбором. Хороший ответ. – xchiltonx

0

Вы можете создать массив списков, но вы не можете использовать типа во время инициализации.

List<Integer>[] lists=new List[10]; 

//insertion 
for(int i=0;i<10;i++){ 
    lists[i]=new ArrayList<Integer>(); 
    lists[i].add(i); 
    lists[i].add(i+1); 
} 

//printing 
for(List<Integer> list:lists){ 
    System.out.println(list.size()); 
} 

Почему это работает? Поскольку переменная lists указывает на структуру данных массива, тип данных которой равен List<Integer>. Этот массив содержит набор ссылок на разные объекты типа List<Integer>, и поэтому, если мы попытаемся запустить lists[i]=new ArrayList<String>();, он не будет компилироваться. Однако, когда мы инициализируем сам массив, нам не нужно предоставлять тип объектов List как List, поскольку из точки JVM объекты List of Integer и объекты List of Object будут иметь такое же количество байтов, что и logn, как их размеры одинаковы. Единственное ограничение возникает, когда мы устанавливаем элемент массива на значение (из списка типа - он должен быть List<Integer> не что-нибудь еще)

Вы можете печатать закиньте List[] к, но конечный результат List<Integer>[] и поведение виртуальной машины Java является одна и та же.

+1

Зачем кому-то нужен этот беспорядок? –

+0

На уровне производства java никто не потребует этого (мы все о Коллекциях и Коллекциях Коллекций), но это хорошая пища для размышлений. –

+0

Никто не использует массивы, если только они не нуждаются в работе с примитивами. массивы в java, возможно, были полезны, если бы они хранились в стеке. –

0

вы можете сделать как List<Integer> a=new ArrayList<Integer>(); , но не должно быть общим

Смежные вопросы