为List <list <myobj>&gt; </list <myobj>分配空间

时间:2015-01-19 16:21:36

标签: java

我目前正在尝试了解Java在我要求时如何分配空间。

具体而言(因为我知道我无法使用泛型声明数组)我做了这个任务:

List<List<Visitor>> elevlists;
elevlists = new ArrayList<List<Visitor>>(5);

因为我希望电梯列表是5个访客列表的列表。根据我的理解,这个命令将清除五个访客列表的空间,而不是那里。

所以我添加了这个,(我强调)并不起作用:

List<Visitor> (elevlists.get(0)) = new ArrayList<Visitor>();

查看我是否可以为任何列表创建实例。

但经过一些调整后,我结束了这段代码:

List<List<Visitor>> elevlists;
elevlists = new ArrayList<List<Visitor>>(5);
List<Visitor> temp = (elevlists.get(0));
temp = new ArrayList<Visitor>();
令我惊讶的是,编译器似乎没问题。

当上面的代码不是<?p?

时,为什么这是可以接受的任何帮助

非常感谢。

3 个答案:

答案 0 :(得分:1)

ArrayList不是数组。它是数组的包装器。

List<List<Visitor>> elevlists;
elevlists = new ArrayList<List<Visitor>>(5);

在这里,您只需创建一个包含5个元素的对象ArrayList。但是这个数组中的所有元素都是NULL。

正确的代码应该是:

List<List<Visitor>> elevlists;
elevlists = new ArrayList<List<Visitor>>(5);
List<Visitor> temp = new ArrayList<Visitor>();
elevlists.add(temp);

答案 1 :(得分:0)

这不符合您的想法。

 List<Visitor> temp = (elevlists.get(0));
 temp = new ArrayList<Visitor>();

第二行仅影响变量temp,现在指向新分配的ArrayList。

将其视为

 get the value stored at element zero (which is currently null) in elevlists, assign that value to temp.

 now throw away that value in temp, and instead make temp point to a new Array List

如果您想使升降表有一些非空值,请使用

elevlists.add(temp);

答案 2 :(得分:0)

我认为,虽然你的第二个代码会编译,但它会在运行时失败,因为elevlists = new ArrayList<List<Visitor>>(5);实际上并没有在elevLists中创建元素 - 这只是对ArrayList类提示了多少空间预留。 ArrayList是一个数组包装器,不像C一样保留数组的内存。

@Tom在评论中是正确的 - 第一个例子没有编译,因为你不能在作业的LHS上进行方法调用。