为什么要为Java ArrayList的remove方法分配一个变量,这会产生什么影响呢?

时间:2012-02-15 23:35:24

标签: java arraylist

假设你宣布了两个名单:

ArrayList listA = new ArrayList();
ArrayList<Book> listB = new ArrayList<Book>();

然后你有这些陈述:

Object obj = listA.remove(2);
Book bk = listB.remove(2);
String str = listA.remove(1);

假设每个指定位置都有一个对象,为什么要将这些方法分配给变量,以及它的后果是什么?我已经三次读过这一章了,我仍然不明白这一点。我错过了什么?

3 个答案:

答案 0 :(得分:3)

remove(int)方法从列表中删除对象并返回已删除的对象。删除对象与删除对象不同......您可能有一个用例要删除对象但仍希望对其执行某些操作。如果您在移除对象后确实不想要该对象,则不要像在

中那样分配它
list.remove(3)

这将删除offset(3)处的对象,并且不保留对它的引用。如果没有其他引用,它最终将被垃圾收集。

答案 1 :(得分:2)

看看这三个陈述:

第一个Object obj = listA.remove(2)正在使用原始类型。该定义包含Object。一切都从Object继承,所以它可以真正拥有任何东西。这可能会导致问题。看看这个post,看看为什么这是不可取的。

第二个是强类型。您只能删除项目并将其分配给定义中的类型(在ArrayList<Book>中,它必须与Book匹配)。这是java编译器检查类型的一种方式,以确保您使用所有相同类型。如果您不匹配,我认为这是编译器错误。

第三个证明了为什么第一个项目是个问题。阅读post,它会告诉你原因。

答案 2 :(得分:0)

当ArrayList使用#remove(Object obj)方法时,如果成功删除它,则返回true;如果未删除,则返回false。

编辑:刚才注意到我在那里使用了Object参数。除了index参数方法之外,它还返回被删除的值。

这对于从1个列表转移到另一个列表,或者有时甚至在递归方法中都很有用。