Java list删除多个指定索引的元素

本篇博文介绍通过list Integer存储的多个指定的索引来循环删除列表里的元素。

  • 索引存储列表:List Integer list
  • 想要删除元素的列表:List Integer datas
package hello;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


/**
 * 删除一个list中的其中几个元素的操作
 * @author 
 *
 */
public class helloworld {
	  /**
	  *得到要用来进行演示的数据 
	  * @return
	  */
		public static List<Integer> initData(){
			List<Integer> datas = new ArrayList<Integer>();
			Integer data = null;
			for(int i=1;i<=10;i++){
				data = new Integer(i);
				datas.add(data);
			}	   
			return datas;
		}
 
		public static void main(String[] args) {
			
			List<Integer> list = new ArrayList<Integer>();  
			list.add(1);
			list.add(2);
			list.add(5);
			list.add(9);
			//定义要删除list中集合的下标组合,一般在真正项目中,这个数组都是有程序执行得到,一般都是排序正常的
			//这里指定添加了4个位置的元素,分别是:1,2,5,9
			
			//打印出来看看
			for(int i=0; i<list.size(); i++) {
				System.out.println(list.get(i));
			}
	  
			List<Integer> datas = initData(); //得到测试数据
	  
			//因为要删除list里面的多个的值,所以会涉及到一个问题,就是当你删除掉下标为1的元素十,
			//原来下标为2的元素会自动改变自己的下标为0,后面的元素依次把自己的下标值减一
			//鉴于这种情况,我们想循环删除list中的多个元素的话,就必须从后往前删,这样保障了你删除了一个元素之后,
			//list中元素的下标移动不会影响到那些需要删除,但是还未删除到的以元素   
			System.out.println("删除前:  "+datas);
	    
			//删除多个指定下标的数据
			for(int i=list.size()-1;i>=0;i--){ //倒序
				if(i<=datas.size()){
					System.out.println("删除了第  "+(list.get(i)+1)+" 个元素");
					datas.remove(list.get(i)); //注意:该方法删除的是list中与datas相等的元素,此时list.get(i)和datas都是integer型。
				} 
			} 
	  
			System.out.println("删除后:  "+datas);		  
	 }	  
 }

程序运行结果:
在这里插入图片描述

package hello;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


/**
 * 删除一个list中的其中几个元素的操作
 * @author 
 *
 */
public class helloworld {
	  /**
	  *得到要用来进行演示的数据 
	  * @return
	  */
		public static List<Integer> initData(){
			List<Integer> datas = new ArrayList<Integer>();
			Integer data = null;
			for(int i=1;i<=10;i++){
				data = new Integer(i);
				datas.add(data);
			}	   
			return datas;
		}
 
		public static void main(String[] args) {
			
			List<Integer> list = new ArrayList<Integer>();  
			list.add(1);
			list.add(2);
			list.add(5);
			list.add(9);
			//定义要删除list中集合的下标组合,一般在真正项目中,这个数组都是有程序执行得到,一般都是排序正常的
			//这里指定添加了4个位置的元素,分别是:1,2,5,9
			
			//打印出来看看
			for(int i=0; i<list.size(); i++) {
				System.out.println(list.get(i));
			}
	  
			List<Integer> datas = initData(); //得到测试数据
	  
			//因为要删除list里面的多个的值,所以会涉及到一个问题,就是当你删除掉下标为1的元素十,
			//原来下标为2的元素会自动改变自己的下标为0,后面的元素依次把自己的下标值减一
			//鉴于这种情况,我们想循环删除list中的多个元素的话,就必须从后往前删,这样保障了你删除了一个元素之后,
			//list中元素的下标移动不会影响到那些需要删除,但是还未删除到的以元素   
			System.out.println("删除前:  "+datas);
	    
			//删除多个指定下标的数据
			for(int i=list.size()-1;i>=0;i--){ //倒序
				if(i<=datas.size()){
					System.out.println("删除了第  "+(list.get(i)+1)+" 个元素");
					//datas.remove(list.get(i));
					int temp = list.get(i); 
					datas.remove(temp);
					//注意这里需要将list.get(i)转换成int型,此时datas.remove(temp)删除的是指定索引即temp位置的元素。
					
				} 
			} 
	  
			System.out.println("删除后:  "+datas);		  
	 }	  
 }

程序运行结果:
在这里插入图片描述

参考博客:
指定索引存储为数组方式:https://blog.csdn.net/goodnew/article/details/17737269?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158407871519724847018936%2522%252C%2522scm%2522%253A%252220140713.130056874…%2522%257D&request_id=158407871519724847018936&biz_id=0&utm_source=distribute.pc_search_result.none-task

Java 中,可以使用 List 接口提供的 removeIf() 方法删除符合指定条件的多个元素。该方法接受一个 Predicate 参数,该参数是一个函数式接口,用于指定删除元素的条件。 例如,如果要从一个 List删除所有小于 5 的元素,可以使用以下代码: ``` List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); list.removeIf(i -> i < 5); ``` 这将从列表删除所有小于 5 的元素。注意,removeIf() 方法在原始列表上进行操作,并返回一个布尔值,指示是否已更改列表。 如果要删除指定索引处的多个元素,可以使用 List 接口提供的 subList() 和 removeAll() 方法。subList() 方法返回一个包含指定起始索引(包括)和结束索引(不包括)之间所有元素的子列表,然后可以使用 removeAll() 方法删除该子列表中的所有元素。 例如,如果要从一个 List删除索引为 2、4、6 的元素,可以使用以下代码: ``` List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9)); List<Integer> indexes = Arrays.asList(2, 4, 6); List<Integer> sublist = list.subList(indexes.get(0), indexes.get(indexes.size() - 1) + 1); list.removeAll(sublist); ``` 这将从列表删除索引为 2、4、6 的元素。注意,subList() 方法返回的子列表是原始列表的一个视图,而不是复制。因此,在更改子列表之前,必须确保未修改原始列表
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值