-6
public class XXXX{
    private List<Integer>[] a;
    public XXXX(int num)
    {
        a = new ....?
    } 
}

我应该如何新建一个

4

6 回答 6

4

NPE:“数组和泛型不能很好地结合在一起”

去列表列表

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

或双数组

int[][] a = new int[5][5];
于 2013-03-26T12:04:59.870 回答
4

您可以创建列表数组,但在初始化期间不能使用类型。

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 的角度来看,Integer 对象列表和 Object 对象列表将需要与 logn 相同的字节数作为它们的尺寸是一样的。当我们将数组成员设置为一个值(List 类型 - 它必须List<Integer>不是其他任何东西)时,唯一的约束就出现了

您可以将类型强制List[]转换为 aList<Integer>[]但最终结果和 JVM 行为是相同的。

于 2013-03-26T12:30:09.957 回答
2

这有效

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

它创建一个可以包含整数列表的数组(大小为 10)

于 2013-03-26T12:12:29.567 回答
0
a = (List<Integer>[]) new List[num];
for(int i = 0; i < num; i++)
    a[i] = new ArrayList<Integer>();

真的,为什么不声明aList<List<Integer>>

于 2013-03-26T12:03:44.427 回答
0

你可以做 asList<Integer> a=new ArrayList<Integer>(); 但 a 不应该是通用的

于 2013-03-26T12:42:09.177 回答
-3

List是java中的一个接口!

您可以将 ArrayList、linket 列表、向量和堆栈等实例的引用提供给具有 List 数据类型的变量

所以你可以使用以下之一,

a = new ArrayList<Integer>();
a = new LinkedList<Integer>();
a = new Vector()<Integer>;
a = new Stack()<Integer>;
于 2013-03-26T12:04:06.297 回答