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);


我写的如果相等就删除它,可是为什么删不了呢?

参考技术A 1.下面是代码
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()))

追问

没有反应啊

追答package zhidao;

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参数遇到问题

Java List --remove(int index)与remove(Object o)方法的区别

java 中list进行动态remove处理

java list的remove方法问题

java list的remove方法问题

java list的remove方法问题