java中list的remove()问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中list的remove()问题相关的知识,希望对你有一定的参考价值。
写了一段应用remove的代码如下
String[] food="bread","cream","butter","peanut","milk";
LinkedList<String> l1= new LinkedList<String>();
System.out.println("..............."+l1);//输出 [bread, cream, butter, peanut, milk]
String[] xfood="bread";
l1.remove(xfood);
System.out.println("..............."+l1);//输出依然为[bread, cream, butter, peanut, milk]
但是如果将l1.remove(xfood);改为l1.remove("xfood");就可以删除list中的bread。查了下资料,是因为
remove的源代码会在删除前进行比较(o==null ? get(i)==null : o.equals(get(i))),但是equals不是只比较内容么?而xfood的内容和list.get(0)的内容是一样的?不是很理解,烦请大神详细解释下~
相关资料:
http://blog.csdn.net/will_awoke/article/details/6528872
主要就是不明白equals的用法,看了定义也不太懂。。。希望有人能帮我详细解释下,谢谢。
E remove()
Retrieves and removes the head (first element) of this list.
E remove(int index)
Removes the element at the specified position in this list.
boolean remove(Object o)
Removes the first occurrence of the specified element from this list, if it is present.
上面写了remove有3种用法,但是你的xfood 是String[], 如果你定义 LinkedList<String[]>的话这个就可以用,
把 String[] xfood="bread"; 改成 String xfood="bread";
bread 应该就会被删除追问
囧,我的例子没举好,我主要想问的是equals这个问题,能否帮我看下这个链接里面的例子http://blog.csdn.net/will_awoke/article/details/6528872,非常感谢
本回答被提问者和网友采纳遍历list进行remove操作异常
参考技术A 产生问题:在对list增强for循环进行遍历的时候,如果在不恰当的位置使用了remove,就会产生ConcurrentModificationException异常
产生原因:
java的foreach循环其实就是根据list对象创建一个Iterator迭代对象,然后针对Iterator进行遍历.遍历过程中会调用对应的hasNext和next方法
(1)ArrayList的hasnext和next 方法
(2)LinkedList的hasnext和next 方法
两种list的iterator 都有一个方法是checkForComodification,目的是校验是否list被修改过。list中有个属性是modCount,记录着操作修改list的属性,如果操作list的add或remove,modCount属性都会进行+1的操作。
如果发生了修改,那么在下一次执行到这一步校验的时候,就会发现两个值不相等,抛出异常。
以上是关于java中list的remove()问题的主要内容,如果未能解决你的问题,请参考以下文章