java 的list.remove函数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 的list.remove函数?相关的知识,希望对你有一定的参考价值。
package Test_01 ;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator ;
public class Test
public static void main(String[] args)
String [] books = "疯狂java讲义" , "轻量级javaEE企业应用实践" ;
List bookList = new ArrayList() ;
for(int i = 0 ; i < books.length ; ++i)
bookList.add(books[i]) ;
ListIterator lit = bookList.listIterator() ;
while( lit.hasNext() )
System.out.println( lit.next() );
lit.add("分 割 线") ;
System.out.println("========下面开始反响迭代==========");
while( lit.hasPrevious() )
System.out.println( lit.previous() );
if(lit.previous() == "分 割 线" )
bookList.remove(lit.previous()) ; //为什么我这里删除不了这个“分割线”?
System.out.println(bookList);
我写的如果相等就删除它,可是为什么删不了呢?
public class Test
public static void main(String[] args)
String[] books = "疯狂java讲义", "轻量级javaEE企业应用实践" ;
List bookList = new ArrayList();
for (int i = 0; i < books.length; ++i)
bookList.add(books[i]);
ListIterator lit = bookList.listIterator();
while (lit.hasNext())
System.out.println(lit.next());
lit.add("分 割 线");
System.out.println("========下面开始反向迭代==========");
while (lit.hasPrevious())
String temp = (String) lit.previous();
if (temp.equals("分 割 线"))
lit.remove(); // 为什么我这里删除不了这个“分割线”?
System.out.println(bookList);
2.分析给你听:
2.1首先,你用
while( lit.hasPrevious() )
System.out.println( lit.previous() );
if(lit.previous() == "分 割 线" )
bookList.remove(lit.previous()) ; //为什么我这里删除不了这个“分割线”?
每次调用lit.previous()都会向前迭代,而不是你想象中的只迭代一次,所以一次lit.previous(),然后赋给了temp;
2.2其次,在遍历的时候进行remove操作会引发java.util.ConcurrentModificationException异常,此时对BookList本身remove就会异常,但是用迭代器就不会异常。参见本回答被提问者采纳 参考技术B if ("分割线".equals(lit.previous)) 上面那句话有问题,当lit指向"分割线"时,你输出时调用了lit.previous()方法,这样lit就指向了下一个元素,这就是原因,解决方法,就是去掉那句System.out.println(lit.previous()); 参考技术C bookList.remove(lit.previous()) ;这句
换成
lit.remove(); 参考技术D if("分 割 线".equals(lit.previous()))追问
没有反应啊
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.ListIterator;
public class Test
public static void main ( String[] args )
String[] books = "疯狂java讲义", "轻量级javaEE" ;
List<String> bookList = Collections.synchronizedList (new ArrayList<String> ());
for ( int i = 0; i < books.length; i++ )
bookList.add (books[i]);
ListIterator<String> lit = bookList.listIterator ();
while (lit.hasNext ())
System.out.println (lit.next ());
lit.add ("分割线");
System.out.println ("============");
System.out.println (bookList + " begin..");
while (lit.hasPrevious ())
String prev = lit.previous ();
// 打印出,就会被获取
// System.out.println (lit.previous ());
if ("分割线".equals (prev))
// 被外部对象移除会报异常
//bookList.remove (prev);
// 采用自身移除
lit.remove ();
// else
//
// System.out.println (lit.previous () + "ffd");
//
System.out.println (bookList + " end..");
以上是关于java 的list.remove函数?的主要内容,如果未能解决你的问题,请参考以下文章
java Stack pop返回值作为list.remove参数遇到问题