public class XXXX{
private List<Integer>[] a;
public XXXX(int num)
{
a = new ....?
}
}
我应该如何新建一个?
public class XXXX{
private List<Integer>[] a;
public XXXX(int num)
{
a = new ....?
}
}
我应该如何新建一个?
NPE:“数组和泛型不能很好地结合在一起”
去列表列表
List<List<Integer>> a = new ArrayList<List<Integer>>();
或双数组
int[][] a = new int[5][5];
您可以创建列表数组,但在初始化期间不能使用类型。
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 行为是相同的。
这有效
int arraySize = 10;
List<Integer>[] a = (List<Integer>[]) new List[arraySize];
它创建一个可以包含整数列表的数组(大小为 10)
a = (List<Integer>[]) new List[num];
for(int i = 0; i < num; i++)
a[i] = new ArrayList<Integer>();
真的,为什么不声明a
为List<List<Integer>>
?
你可以做 asList<Integer> a=new ArrayList<Integer>();
但 a 不应该是通用的
List是java中的一个接口!
您可以将 ArrayList、linket 列表、向量和堆栈等实例的引用提供给具有 List 数据类型的变量
所以你可以使用以下之一,
a = new ArrayList<Integer>();
a = new LinkedList<Integer>();
a = new Vector()<Integer>;
a = new Stack()<Integer>;