day09-ArrayList集合中如何删除多个对象操作

删除对象用的方法:

public E remove(int index)
定义:
	删除指定索引处的对象,返回被修改的元素
格式:
	public :修饰符
	E:引用类型
	remove:方法名
	int index:需要删除位置的索引值,索引从0开始
对象:
	public E remove(int index)方法格式用于集合之中

举例说明:

需求:

1.定义类,包含以下成员:
  1.1成员属性: name (姓名):String类型,age (年龄):int类型, like (爱好):String类型,属性使⽤private修饰。
  1.2⽣成⽅法:
      1).get/set⽅法
      2)有参构造⽅法
2.定义类:Test,类中定义main()⽅法,按以下要求编写代码:
  2.1分别实例化六个Singer对象,六个对象的属性分别为: "xxx" ,25,”打篮球”、"xxx" ,35,”游泳”、"xxx" ,19,”踢⾜球”、"xxxx" ,1 8,”击剑”、"xxxxx" ,22,”滑雪”、"xx" ,19,”拳击”;
  2.2创建⼀个ArrayList集合,这个集合⾥⾯存储的是Singer类型,分别将上⾯的六个对象添加到集合中 ;
  2.3遍历这个集合,在遍历的过程中,如果集合中对象的年龄⼤于30,那么将这个对象的爱好改成”***”,如果对象的姓名字符数大于等于4个时, 那么就把这个对象删除。
  2.4正确修改和删除对象后,遍历集合,打印集合⾥所有对象的所有属性信息到控制台。

定义Demo类:

public class Demo {
    private String name;
    private int age;
    private String like;

    public Demo() {
    }

    public Demo(String name, int age, String like) {
        this.name = name;
        this.age = age;
        this.like = like;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getLike() {
        return like;
    }

    public void setLike(String like) {
        this.like = like;
    }
}

定义DemoTest测试类:

import java.util.ArrayList;

public class DemoTest {
    public static void main(String[] args) {
        Demo s1=new Demo("xxx",25,"打篮球");
        Demo s2=new Demo("xxx",35,"游泳");
        Demo s3=new Demo("xxx",19,"踢足球");
        Demo s4=new Demo("xxxx",18,"击剑");
        Demo s5=new Demo("xxxxx",22,"滑雪");
        Demo s6=new Demo("xx",19,"拳击");
        ArrayList<Demo> list=new ArrayList<>();
        list.add(s1);
        list.add(s2);
        list.add(s3);
        list.add(s4);
        list.add(s5);
        list.add(s6);
        list=Updata(list);
        list=Delete(list);
        for (int i = 0; i <list.size(); i++) {
            System.out.print("姓名:"+list.get(i).getName()+"\t年龄:"+list.get(i).getAge()+"\t爱好:"+list.get(i).getLike()+"\n");
        }
    }

    //定义修改方法
    public static ArrayList Updata(ArrayList<Demo> list){
        for (int i = 0; i <list.size(); i++) {
       		//获得集合中的相应索引对应的对象用get方法取出年龄的值
            if (list.get(i).getAge() > 30) {
                list.get(i).setLike("***");
            }
        }
        return list;
    }

    //定义删除方法
    public static ArrayList Delete(ArrayList<Demo> list){
        for (int i = 0; i <list.size(); i++) {
        	//获取集合中相应索引对象用get方法取出姓名的字符串并求出字符串长度
            if(list.get(i).getName().length()>=4){
                list.remove(i);
            }
        }
        return list;
    }
}

运行结果:

在这里插入图片描述

程序存在的问题:

	我们发现在集合中我们想要删除的内容并没有删除干净,原因是在删除方法中当已经删除成功第一个对象后,集合的长度发生改变,从删除的第一个满足条件的对象位置开始,之后的对象索引都会向前移动,当集合内满足条件的对象相邻时,成功删除完一个后,后一个对象的索引向前移动,而循环内的局部变量又是每次循环结束后都自加或自减的,因此就会跳过这个对象对后面的对象进行相同操作。

解决办法:

	在执行删除操作的循环体的判断语句里加上局部变量自减1就行了

相应代码:

//定义删除方法
   public static ArrayList Delete(ArrayList<Demo> list){
       for (int i = 0; i <list.size(); i++) {
           if(list.get(i).getName().length()>=4){
               list.remove(i);
               i--; //改进办法
           }
       }
       return list;
   }

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

氪不改命

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值