博客信息

集合框架ArrayList中的重复元素去重及其底层原理

发布时间:『 2019-05-13 00:08』  博客类别:java基础  阅读(729)

判断list 集合中元素是否相同,依据的是元素的equals方法

Contains调用了equals

Remove调用了equals


字符串去重

list中存储的是字符串,而string的equals方法就是比的字符串值

小李飞刀_集合框架

引用数据类型去重(同姓名同年龄视为同一个人

思路

1、对人进行描述,将数据封装进对象

2、将对象放入容器

3、去重

引用数据类型被调用了equals方法验证

小李飞刀_集合框架



集合list中remove方法调用时,调用了equals方法验证

小李飞刀_集合框架



相关代码如下

package com.javaxl;

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

/**
 * @author 小李飞刀
 * @site www.javaxl.com
 * @company
 * @create  2019-05-13 12:03
 */
public class ArrayListDemo {
    public static void main(String[] args) {
        ArrayList al = new ArrayList();

//        al.add("java01");
//        al.add("java02");
//        al.add("java03");
//        al.add("java04");
//        al.add("java03");
//        al.add("java03");
//        System.out.println("原集合:"+al);
//        System.out.println("现集合:"+singleElementList(al));
        al.add(new Peroon("java01",11));
        al.add(new Peroon("java02",12));
        al.add(new Peroon("java03",13));
        al.add(new Peroon("java04",14));
        al.add(new Peroon("java02",12));
        System.out.println("原集合:"+al);
        System.out.println("去重集合:"+singleElementList(al));//会发现不能去重复了
        al.remove(new Peroon("java03",13));
        System.out.println("删除元素后集合:"+al);
    }

    /**
     * 字符串去重
     * @param al
     * @return
     */
    public static ArrayList singleElementList(ArrayList al) {
        ArrayList newAl = new ArrayList();
        Iterator it = al.iterator();
        while(it.hasNext()){
            Object next = it.next();
            if(!newAl.contains(next)){
                newAl.add(next);
            }
        }
        return newAl;
    }
}

class Peroon{
    private String name;
    private int age;

    public Peroon() {
    }

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

    @Override
    public boolean equals(Object obj) {
        if(obj instanceof Peroon){
            Peroon p = (Peroon)obj;
            System.out.println(this.getName()+"......equals......"+p.getName());
            return (this.getName().equals(p.getName()) && this.getAge() == p.getAge());
        }
        return false;
    }

    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;
    }
}




关键字:     集合框架       ArrayList  

备案号:湘ICP备19000029号

Copyright © 2018-2019 javaxl晓码阁 版权所有