ArrayList中去去除字符串相同元素

本文介绍了如何在Java中对ArrayList进行元素去重操作,包括不创建新集合的情况下直接修改原集合去重,以及针对自定义对象去重的方法。通过迭代和比较实现去重,并展示了自定义equals()方法的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ArrayList中去去除字符串相同元素(内容相同的字符串)

分析:
1.创建集合对象
2.添加多个字符串的元素(包含内容相同)
3.创建新的集合
4.遍历旧集合,获取到每个元素
5.拿这个元素到新集合中去找,看有没有: 有?不搭理,没有?添加到新集合
6.遍历新集合

package Test1;

import java.util.ArrayList;
import java.util.Iterator;

/**
 * @作者:Xem626
 * @date: 2022/7/20 10:36
 * @TODO
 */
public class Test2 {
    public static void main(String[] args) {



        //创建一个集合
        ArrayList arrayList =new ArrayList();

        //添加多个元素
        arrayList.add("hello");

        arrayList.add("world");
        arrayList.add("java");
        arrayList.add("hello");

        arrayList.add("world");
        arrayList.add("java");

        //创建新集合
        ArrayList newArrayList= new ArrayList();


        //遍历arrayList集合,从中获取每个元素
        Iterator iterator = arrayList.iterator();

        while (iterator.hasNext()){

            //获取到集合中的元素
            String s = (String) iterator.next();

            //拿到这个元素到新集合中去找,看有没
            if (!newArrayList.contains(s)) {
                //如果,没的,就添加
                newArrayList.add(s);
            }
        }

        //遍历新集合
        for (int i=0;i<newArrayList.size();i++){

            String s = (String) newArrayList.get(i);
            System.out.println(s);
        }

    }
}

在这里插入图片描述

需求:不能创建新集合,在原有的集合基础上,进行元素去重

package Test1;

import java.util.ArrayList;
import java.util.Iterator;

/**
 * @作者:Xem626
 * @date: 2022/7/20 10:39
 * @TODO
 */
public class Test3 {
    public static void main(String[] args) {

        ArrayList arrayList =new ArrayList();

        //添加多个元素
        arrayList.add("hello");

        arrayList.add("world");
        arrayList.add("java");
        arrayList.add("hello");
        arrayList.add("hello");
        arrayList.add("hello");
        arrayList.add("world");
        arrayList.add("world");


        //排序思想,依次拿从索引为0的元素和后面的每个元素作比较,有就干掉
        //从索引为1的元素和后面的元素依次做比较,有就干掉,同理类推


        for (int x=0;x<arrayList.size()-1;x++){


            for (int y=x+1;y<arrayList.size();y++){

                if (arrayList.get(x).equals(arrayList.get(y))) {
                    arrayList.remove(y);
                    y--;//当发生了重复时,就把下标减少1
                }
            }
        }


        //遍历
        Iterator iterator = arrayList.iterator();
        while (iterator.hasNext()){

            String s = (String) iterator.next();
            System.out.println(s);
        }

    }
}

在这里插入图片描述

需求:怎么去除集合中自定义的对象,去重

为什么:
我们的问题出现在判断上。而这个问题的功能是集合自己提供。所以我们要想高搞清除应该看源码。

contains()方法的底层依赖equals()方法
而我们的学生的类中没有equals(),会默认使用父类Object的equals()方法
Object的equals()方法默认比较的是地址值,所以他们进去了,因为new的东西,地址值是不同
所以我们去比较的时候,就返现返回是false。

按照我们的需求,比较成员变量,重写equals()

自动生成,equals()即可
在这里插入图片描述
在这里插入图片描述

package Test1;

import java.util.Objects;

/**
 * @作者:Xem626
 * @date: 2022/7/20 10:26
 * @TODO
 */
public class Student {
    private String name;

    private int age;

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

    public Student() {
    }


    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 boolean equals(Object object){
//
//        //如果另一个对象和当前对象引用都一样,那么肯定是同一个对象的实例,则返回true
//        if (this==object)
//            return true;
//        //如果另外一个对象是null
//        if (object==null) {
//            return false;
//        }
//
//        //如果另外一个对象和当前对象的类型都不一样,那么肯定不相等,返回false
//        if (this.getClass()!=object.getClass()) {
//            return false;
//        }
//
//        //到这步,传进来的对象肯定和当前对象类型一样,那么直接转换
//        Student student = (Student) object;
//        //检测两个对象的age属性,不一样返回false
//        if (this.age!=student.age) {
//            return false;
//        }
//
//        //检测name属性,由于name属性是字符串,不能直接用==比较,这里我不去直接
//        //用name.equals(student.name),因为name为null,会发生空指针异常
//        if (this.name ==null) {
//            if (student.name!=null) {
//                return false;
//            }else if (!name.equals(student.name)) {
//                return true;
//            }
//
//        }
//
//        //如果前面都满足,说明两个对象相等
//        return true;
//
//    }
//


    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Student)) return false;
        Student student = (Student) o;
        boolean result =age == student.age &&
                Objects.equals(name, student.name);
        System.out.println("比较结果:"+result);
        return result;
    }

//    @Override
//    public int hashCode() {
//        return Objects.hash(name, age);
//    }
}

package Test1;

import java.util.ArrayList;
import java.util.Iterator;

/**
 * @作者:Xem626
 * @date: 2022/7/20 10:51
 * @TODO
 */
public class Test4 {

    public static void main(String[] args) {


        //创建对象

        Student s1 = new Student("小黑", 18);
        Student s2 = new Student("小白", 17);
        Student s3 = new Student("小红", 16);
        Student s4 = new Student("小黄", 15);
        Student s5 = new Student("小白", 17);
        Student s6 = new Student("小红", 16);
        Student s7 = new Student("小黄", 15);


        //        System.out.println("111:"+s2.equals(s5));
//        System.out.println(s2);
//        System.out.println(s3);
//
//        String s8="abc";
//        String s9="abc";
//        System.out.println("222:"+s8.equals(s9));
        //添加元素
        ArrayList arrayList =new ArrayList();

        arrayList.add(s1);
        arrayList.add(s2);
        arrayList.add(s3);
        arrayList.add(s4);
        arrayList.add(s5);
        arrayList.add(s6);
        arrayList.add(s7);



        //创建新的集合
        ArrayList newArraylist =new ArrayList();

        Iterator iterator = arrayList.iterator();

        while (iterator.hasNext()){

            Student student = (Student) iterator.next();

            //拿到这个元素进行比较
            if (!newArraylist.contains(student)) {
                newArraylist.add(student);
            }
        }



        //遍历新的集合

        for (int x=0;x<newArraylist.size();x++){

            Student student1 = (Student) newArraylist.get(x);
            System.out.println(student1.getName()+"------"+student1.getAge());
        }
    }
}

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Xem626

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

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

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

打赏作者

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

抵扣说明:

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

余额充值