【Array、List】Java数组或集合中如何删除元素
2017-09-07 23:15
806 查看
首先,数组的长度是固定的,你只可能抹掉一个元素,但是不能修改数组的长度;
这里,我们从控制台可以看到,原来下标为1的那个元素没有了,只有第0项和第2项了;我们修改下打印条件,可以看到,第0项,第1项和第2项分别为1,null,3;只是抹去了2,变为null;不算真正意义上的删除;
按照这种方法走下来,我们报错了:
这是因为对Vector、ArrayList在迭代的时候如果同时对其进行修改就会抛出java.util.ConcurrentModificationException异常。具体可以看这里
这里,从图中,我们可以看到迭代器有三个属性:
cursor:表示当前元素的下标index为0;
lastRet:表示上一个下标,为-1;即初始状态;
expectedModCont:表示这个迭代器期望的元素总个数;因为我们的list有3个元素,所以,迭代器期望个数也为3;
然后我们打印了下迭代器实例的对象和类型:
做完remove之后,还没有报错,一切正常,list集合也从3个变成了两个,元素删掉了,集合大小也变化了;
但是往下走就得报错了,怎么办?
我们修改下代码:
这里加了一个条件判断:
接下来就一切正常了,元素也删除了,List集合大小也变化了;完美;
完整代码:
一、普通for循环删除(不可行)
public class Test1 { public static void main(String[] args) { //目标:删除2; Integer a[]={1,2,3}; for(int i =0;i<a.length;i++){ if (2==a[i]){ //这里,我们将等于2的那项设为null; a[i]=null; } } System.out.println(a); } }
这里,我们从控制台可以看到,原来下标为1的那个元素没有了,只有第0项和第2项了;我们修改下打印条件,可以看到,第0项,第1项和第2项分别为1,null,3;只是抹去了2,变为null;不算真正意义上的删除;
二、迭代器删除(可行)
public class Test1 { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); list.add("aa"); list.add("bb"); list.add("cc"); Iterator<String> iter = list.iterator(); while(iter.hasNext()){ list.remove(0); String str= iter.next(); System.out.println(list); } } }
按照这种方法走下来,我们报错了:
Exception in thread "main" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901) at java.util.ArrayList$Itr.next(ArrayList.java:851) at Test1.main(Test1.java:28)
这是因为对Vector、ArrayList在迭代的时候如果同时对其进行修改就会抛出java.util.ConcurrentModificationException异常。具体可以看这里
这里,从图中,我们可以看到迭代器有三个属性:
cursor:表示当前元素的下标index为0;
lastRet:表示上一个下标,为-1;即初始状态;
expectedModCont:表示这个迭代器期望的元素总个数;因为我们的list有3个元素,所以,迭代器期望个数也为3;
然后我们打印了下迭代器实例的对象和类型:
//迭代器实体,对我们没有太大意义: java.util.ArrayList$Itr@123772c4 //迭代器类型: class java.util.ArrayList$Itr
做完remove之后,还没有报错,一切正常,list集合也从3个变成了两个,元素删掉了,集合大小也变化了;
但是往下走就得报错了,怎么办?
我们修改下代码:
这里写代码片
这里加了一个条件判断:
if("aa".equals(str)){ iter.remove(); }
接下来就一切正常了,元素也删除了,List集合大小也变化了;完美;
完整代码:
public class Test1 {
public static void main(String[] args) {
//删除2;
// Integer a[]={1,2,3};
// for(int i =0;i<a.length;i++){
// if (2==a[i]){
// a[i]=null;
// }
// }
//System.out.println(a[0]);
//System.out.println(a[1]);
//System.out.println(a[2]);
//我们如果再往里添加元素;
ArrayList<String> list = new ArrayList<String>();
list.add("aa");
list.add("bb");
list.add("cc");
Iterator<String> iter = list.iterator();
while(iter.hasNext()){
//list.remove(0);
String str= iter.next();
if("aa".equals(str)){ iter.remove(); }
System.out.println("str:"+str);
}
System.out.println(list);
}
}
相关文章推荐
- Java中如何循环删除一个集合(如List)中的多个元素
- Java中如何循环删除一个集合(如List)中的多个元素
- Java中如何循环删除一个集合(如List)中的多个元素
- Java中如何循环删除一个集合(如List)中的多个元素
- Java中如何循环删除一个集合(如List)中的多个元素
- Java中如何循环删除一个集合(如List)中的多个元素
- Java中如何循环删除一个集合(如List)中的多个元素
- 如何删除JAVA集合中的元素
- 如何删除JAVA集合中的元素
- 【LeetCode-面试算法经典-Java实现】【026-Remove Duplicates from Sorted Array(删除排序数组中的重复元素)】
- Java中数组和List集合如何互相转换。
- Java中数组和List集合如何互相转换。
- java中 set,list,array(集合与数组)相互转换
- 循环的时候如何安全地删除java集合的元素
- 如何删除JAVA集合中的元素
- JAVA中,List<Interger>集合怎么删除特定值的元素,不是根据下标
- Java Scrfipt 数组如何删除一个元素
- java中循环遍历删除List和Set集合中元素的方法
- Java中如何删除一个集合中的多个元素
- java中 set,list,array(集合与数组)相互转换