java的List 的remove抛出异常
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java的List 的remove抛出异常相关的知识,希望对你有一定的参考价值。
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
public class Student
public String name;
public String id;
public List mycourse;
public Student(String id,String name,Course course[])
this.id = id ;
this.name = name;
this.mycourse = Arrays.asList(course);
System.out.println("你的选课为:");
Course[] temp = new Course[5];
for (int i = 0;i<mycourse.size();i++)
temp[i] = (Course) mycourse.get(i);
if(temp[i]==null)
else
System.out.println(temp[i].id+"-"+temp[i].name);
System.out.println("确认选课无误吗?是-1 否-0");
Scanner in = new Scanner(System.in);
int judge;
if ((judge = in.nextInt())== 1)
else
System.out.println("你想进行什么操作?增添课程-1 移除课程-0");
if((judge=in.nextInt())==0)
System.out.println("按屏幕先后顺序输入1-5,即可移除对应课程:");
for (int i = 0;i<mycourse.size();i++)
temp[i] = (Course) mycourse.get(i);
if(temp[i]==null)
else
System.out.println(temp[i].id+"-"+temp[i].name);
int x =in.nextInt();
mycourse.remove(x-1);
哪里错了,为什么老是抛出这个异常
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(Unknown Source)
at com.Collection.me.Student.<init>(Student.java:54)
at com.Collection.me.call.<init>(call.java:47)
at com.Collection.me.Main.main(Main.java:9)
这种list不支持remove操作追问
那需要怎么改呢?改成什么类型的集合呢?
追答Arrays.asList返回的List直接以数组为底层的数据,数组是不可变的。
可以使用ArrayList或者LinkedList,Vector,很多集合都可以的。
~
java 中list进行动态remove处理
java中遍历 list遇到需要动态删除arraylist中的一些元素 的情况
错误的方式
for(int i = 0, len = list.size(); i < len; i++){ if(list.get(i) == 1) { list.remove(i); } }
这样会抛出异常
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
at java.util.ArrayList.RangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source
这个异常是因为删除元素之后未改变相应角标,遍历到最后一个 的时候 就会找不到抛出 这个异常
正确做法删除下标以及定位到遍历位置
for(int i = 0, len = list.size(); i < len; i++){ if(list.get(i) == 1){ list.remove(i); len--; i--; } }
或者使用Java的Iterator接口来实现遍历
Iterator<Integer> iterator = list.iterator(); while(iterator.hasNext()){ int i = iterator.next(); if(i == 1){ iterator.remove(); } }
以上是关于java的List 的remove抛出异常的主要内容,如果未能解决你的问题,请参考以下文章