java android 对一个集合进行连续有选择的删除

在我们的一般的代码中,如果想要删除集合里面的几项的话,都是遍历这个这个集合,然后在里面判断一下是不是符合删除的要求,然后进行删除

代码如下:

for(int j=0;j<listString.size();j++) {
			if(booleanList.get(j)){
				booleanList.remove(j);
				listString.remove(j);
				System.out.println("删除数据中:index:"+j+"当前集合大小:"+listString.size());
			}
		}

这样的代码,如果我们这个集合的所有元素都是符号删除条件的,那么这个集合只能删除一半的元素..因为i在自增,而size在变小

如果我们提前获取集合的值得话,待会的操作可能就会越界

真正的实现方法是,在集合的每一次判断删除中,我们如果删除了这个元素,那么我们就把i的值减去1,让他下次依然从这个位置开始算起,到此问题解决

当初想着可麻烦.真正静下心来,其实也是很好解决的,所以遇事一定要淡定

完整代码:

package Test;

import java.util.ArrayList;

public class TestListRemove {

	public static void main(String[] args) {
		ArrayList<String> listString = new ArrayList<String>();
		ArrayList<Boolean> booleanList = new ArrayList<Boolean>();

		System.out.println("初始化数据");
		for(int i=1;i<5;i++) {
			listString.add("this is index:"+i);
			//false true false true 删除第2个 第4个
			if(i%2==0) {
				booleanList.add(true);
			} else {
				booleanList.add(false);
			}

		}

		System.out.println("删除数据");
		for(int j=0;j<listString.size();j++) {
			if(booleanList.get(j)){
				booleanList.remove(j);
				listString.remove(j);
				//如果当前的位置上的数据我们需要删除,那么我们就删除,然后记得把游标减一下
				//好让他下次依然从这个位置进行删除操作,因为我们此次的删除操作,会导致后面的补过来
				j--;
				System.out.println("删除数据中:index:"+j+"当前集合大小:"+listString.size());
			}
		} 

		//CopyOnWriteArrayList<String> copyOnWriteArrayList = new CopyOnWriteArrayList<String>(listString);
		//网上说还有一种利用CopyOnWriteArrayList的方法,这里没有尝试

	}
}
时间: 2024-11-09 06:26:36

java android 对一个集合进行连续有选择的删除的相关文章

Android 新建一个草稿,保存,然后全部删除会话,关机再开机后还会显示保存的草稿

在ComposeMessageActivity.java里面修改 onShutDown()这个函数 在saveDraft(false)这句话那里添加判断条件 if (!mDestroy) { saveDraft(false) ;}

Android 和Java API的一个坑:SimpleDateFormat

今天上班遇到这么一个意料之外的异常: 出问题的代码是这样的(已去除上下文信息): Log.i(LOG_TAG, new SimpleDateFormat("YYYY-MM-dd HH:mm:ss", Locale.CHINA) .format(System.currentTimeMillis())); 反复检查,感觉没有问题,于是新建一个Java Project,直接输出同样的代码: public class Main{ public static void main(String[]

【Java&amp;Android开源库代码剖析】のandroid-async-http(如何设计一个优雅的Android网络请求框架,同时支持同步和异步请求)开篇

在<[Java&Android开源库代码剖析]のandroid-smart-image-view>一文中我们提到了android-async-http这个开源库,本文正式开篇来详细介绍这个库的实现,同时结合源码探讨如何设计一个优雅的Android网络请求框架.做过一段时间Android开发的同学应该对这个库不陌生,因为它对Apache的HttpClient API的封装使得开发者可以简洁优雅的实现网络请求和响应,并且同时支持同步和异步请求. 网络请求框架一般至少需要具备如下几个组件:1

android 一个集合问题导致不得不说的故事

啥也不说,先看图,然后给你讲需求! 技能中只能添加三项,如果选择超过三个就给提示,选中的可以再次点击就是删除,这个肯定不难,但是做着发现一个问题,在这记录下,我的做法是把定义一个集合,然后当用户点击的时候判断这个是否在集合中如果在集合中就删除,如果不在集合中就添加,然后就adapter.notifyDataSetChanged()就完事,先把我写的点击事件相关逻辑贴一下: @Override public void onItemClick(AdapterView<?> arg0, View a

从Java/Android到Swift iOS开发:语言与框架对比

本文是我在『移动前线』微信群2016年4月28日的分享总结整理. 我从2009年开始做Android开发,开始接触Swift是在2014年底,当时组里曾经做过一个Demo App,感觉技术还不够成熟没有正式发布.2016年初我们正式使用swift开发上线了销售助手App产品,积累了比较丰富的swift项目实战经验,开源框架都是用的swift版本,大量使用了面向协议和函数式编程.iOS App开发人员基本都是以前安卓版本的开发人员,同时维护安卓和iOS 2个版本,效率很高. 今天分享的主题是Jav

[转]Java中常用的集合—初学者的你不可错过的精编整理

集合一直都是项目中非常常见的,我是一个Android开发者,集合对于我来说,在项目中使用的次数非常之多,因为使用的多,熟能生巧,所以这里呢!就给那些初学者整理一下Java当中常用的集合吧!   因为此篇文章是给初学者看到,所以对于集合的认识,我们就不从内存的角度去分析了,等你Java学到一定的时候,再去学习一下集合的底层实现,这会让成为一名更加牛的Java程序员.   在整理之前呢,我们先聊一聊为什么集合会这么常用?,集合这个概念,我们初次接触是在高中的数学当中,高中的集合具有以下知识点:  1

java/android 设计模式学习笔记(14)---外观模式

这篇博客来介绍外观模式(Facade Pattern),外观模式也称为门面模式,它在开发过程中运用频率非常高,尤其是第三方 SDK 基本很大概率都会使用外观模式.通过一个外观类使得整个子系统只有一个统一的高层的接口,这样能够降低用户的使用成本,也对用户屏蔽了很多实现细节.当然,在我们的开发过程中,外观模式也是我们封装 API 的常用手段,例如网络模块.ImageLoader 模块等.其实我们在开发过程中可能已经使用过很多次外观模式,只是没有从理论层面去了解它. 转载请注明出处:http://bl

Java笔记(15):集合框架(01)

1.对象数组的概述和使用 1 package cn.itcast_01; 2 3 public class Student { 4 // 成员变量 5 private String name; 6 private int age; 7 8 // 构造方法 9 public Student() { 10 super(); 11 } 12 13 public Student(String name, int age) { 14 super(); 15 this.name = name; 16 thi

java android ExecutorService 线程池解析

ExecutorService: 它也是一个接口,它扩展自Executor接口,Executor接口更像一个抽象的命令模式,仅有一个方法:execute(runnable);Executor接口简单,可是非常重要,重要在这样的设计的模式上..Java5以后,通过Executor来启动线程比用Thread的start()更好.在新特征中,能够非常easy控制线程的启动.运行和关闭过程,还能够非常easy使用线程池的特性. 几种不同的ExecutorService线程池对象 1.newCachedT