List 集合remove问题

java的list集合中。使用remove删除元素:

方法一:

static List<Integer> list3 = new ArrayList<Integer>();
static {
	list3.add(1);
	list3.add(2);
	list3.add(2);
	list3.add(2);
	list3.add(2);
}
private static void remove(List<Integer> list3) {
	for (int i=0;i<list3.size();i++) {
		if(list3.get(i) == 2) {
			list3.remove(i);
		}
	}
	print(list3);
}

打印结果:1。2。2

造成问题的解决办法是,在使用remove删除list中元素时,list集合的size会发生变化。所以不能达到预期。

方法二:

private static void remove(List<Integer> list3) {
	for(int i = 0 , len= list3.size();i<len;++i){
		  if(list3.get(i)==2){
			  list3.remove(i);
			   --len;//降低一个
			   --i;//多谢deny_guoshou指正,假设不加会出现评论1楼所说的情况。
		 }
	}
	print(list3);
}

打印结果:1

因为动态的计算list大小,所以能够得到正确答案

方法三:

Iterator<String> sListIterator = list.iterator();
while(sListIterator.hasNext()){
    String e = sListIterator.next();
    if(e.equals("3")){
    sListIterator.remove();
    }
}

List接口内部实现了Iterator接口。提供开发人员一个iterator()得到当前list对象的一个iterator对象。

注:对于并发情况,更因该使用第三种方法(迭代器)。否则一定会出现并发问题。

时间: 2025-01-14 08:29:11

List 集合remove问题的相关文章

js 重写集合remove方法

Array.prototype.remove = function (dx) { if (isNaN(dx) || dx > this.length) { return false; } for (var i = 0, n = 0; i < this.length; i++) { if (this[i] != this[dx]) { this[n++] = this[i] } } this.length -= 1 } 原文地址:https://www.cnblogs.com/jimmyLei/

Java学习日记-11 集合(1)

Collection接口集合中存储的只是对象的引用,不是对象本身. 1.ArrayList<E>类1.1ArrayList和Collection的关系 public interface List<E>extends Collection<E> public class ArrayList<E> implements List<E> 1.2构造方法 ArrayList() 构造一个初始容量为 10 的空列表. ArrayList(Collectio

集合的使用

集合的特点 集合是一个无序的,不重复的数组组合 1.去重,找出2个列表里重复的项.把一个列表变成集合就自动去重了. 2.关系测试,测试两组数据之前的交集.差集.并集等关系 常用操作: set(字符串),就把列表转换成集合.注意集合的大括号组成{},像字典,但是不是 这种写法,是直接把列表变成集合: 取集合的交集: 集合1.intersection(集合2) 取集合的并集: 集合1.union(集合2) 取两个集合的差集: 集合1.difference(集合2)=集合1在集合2里没有的数值 判断集

集合使用问题笔记

1.遍历集合删除元素 1 package collectionDemo.list; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 public class ListDemo { 7 8 public static void main(String[] args) { 9 List<String> sList = new ArrayList<String>(); 10 sList.add("0&qu

java集合小总结

8 集合 用于存储对象,长度可变,可以存储不同类型的对象 8.1 集合框架 Collection List ArrayList:底层的数据结构使用的是数组结构.特点:查询速度快,增删慢.线程不同步 LinkedList:底层的数据结构使用的是链表数据结构.特点:查询慢,增删快.线程不同步 Vector:底层的数据结构使用的是数组数据结构.线程同步,被ArrayList替代了. Set HashSet:底层的数据结构使用的是哈希表,线程不同步. TreeSet:底层的数据结构使用的是二叉树,可以对

Java集合——Map接口

1.定义 Map用于保存存在映射关系<key,value>的数据.其中,key值不能重复(使用equals()方法比较),value值可以重复 2.方法 put(key,value):添加元素 get(Object key):获取指定key的元素 keySet():返回指定对象key的集合 values():返回指定对象value的集合 remove(Object key):移除指定key的元素,并且返回对应值的引用 entrySet():返回映射中包含映射关系的视图 3.常用实现类 Hash

【Java】Java集合框架笔记

今天在QQ群上跟人家交流,错误得把List接口说成了ArrayList的父类,当时脸都红了,不行,一定要跪着回去复习Java,所以把Java的书拿出来,把集合框架的认真仔细的看了一遍,在EverNote上写了一篇笔记,所以搬到博客上来跟大家分享一下.以下就是了. Java集合框架支持以下两种类型的容器: 一种是为了存储一个元素的集合,简称为集合(collection) 另一种是为了存储键值对,成为图(map) 另外:Java集合框架内的所有实例类都实现了Clonable和Serializable

C#集合1

在说集合之前,先来个小插曲--里氏转换 --里氏转换 里氏转换的两个特性 子类可以赋值给父类:如果有一个地方需要父类作为参数,我们可以给一个子类代替 如果父类中装的是子类对象,那么可以将这个父类对象强制转换为对应的子类对象 is和as用于类型的强制转换 is--如果能转换成功,则返回true,否则返回false //假设有两个类,一个Person类,一个Son类 //Son类继于Person类 Person p = new Son(); if(p is Son){ Son s = (Son)p;

python 集合的相关用法

集合是无序的,不重复的数据类型,可以改的数据类型 (不可哈希)但里面的数据 不能更改(可哈西)所以说集合是不能够作为字典的键 由于集合的元素不重复,所以可以用集合来消除重复元素. s = [1,2,2,2,3,4] s1 = set(s) s = list(s1) print(s) # [1,2,3,4] 集合的增 s = {1,2,3} s.add('是啥') print(s) # {'是啥', 1, 2, 3} s.update(['没啥']) print(s) # {1, 2, 3, '是