您好,我在你的代码中加了一些测试代码,有助于你的理解,最后对结果进行了解释,希望对你有帮助。
import java.util.ArrayList;
import java.util.List;
public class TestDemo{
public static void main(String[] args){
List<String> list=new ArrayList<String>();
list.add("aa");
list.add("bb");
list.add("cc");
list.add("dd");
list.add("ff");
System.out.println(list.size()); //测试代码 结果是5.
//System.out.println(list.remove(list.get(0))); //测试代码 只运行这行代码结果是true
//System.out.println(list.get(0)); //测试代码 只运行这行代码结果是aa
for(int i=0;i<list.size();i++){
list.remove(list.get(i)); //只运行这行代码,结果是空白
//System.out.print(list.remove(list.get(i))); //测试代码 只运行这行代码结果是truetruetrue(3个true)
//System.out.print(list.get(i)); //测试代码 只运行这行代码结果是aabbccddff(即打印出所有元素)
// System.out.print(list.remove(i)); //测试代码 只运行这行代码结果是aaccff
}
}
}
/*
*
* 从上面的测试中我们就可以看出,问题出在对remove方法的理解上。
* 集合中的remove方法:
* 有两种:
* E remove(int index)
* Removes the element at the specified position in this list (optional operation). Shifts any subsequent elements to the left (subtracts one from their indices). Returns the element that was removed from the list.
* boolean remove(Object o)
* Removes the first occurrence of the specified element from this list, if it is present (optional operation). If this list does not contain the element, it is unchanged. More formally, removes the element with the lowest index i such that (o==null ? get(i)==null : o.equals(get(i))) (if such an element exists). Returns true if this list contained the specified element (or equivalently, if this list changed as a result of the call).
* remove方法的参数需要的是集合中元素的角标而不是元素本身,当你将角标传递给remove时,它会移除对应的元素,并且将其返回,这样我们就可以打印出这个元素了。而如果你传递给remove一个对象,那么就会返回boolean值,true或false。这可以解释你得到的现象。
* 另外,需要注意的是当把一个元素移除之后,它会将集合中剩余的元素进行角标的左移,所以在我们的最后一行代码中,当i=1时,对应的元素不再是bb,而是cc,所以将cc移除了,同理下一次移除的是ff。这样就看到了最后一个测试代码指出的结果。也可以解释倒数第三行代码看到的3个true的结果了。
*/
|