假设你宣布了两个名单:
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);
假设每个指定位置都有一个对象,为什么要将这些方法分配给变量,以及它的后果是什么?我已经三次读过这一章了,我仍然不明白这一点。我错过了什么?
答案 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个列表转移到另一个列表,或者有时甚至在递归方法中都很有用。