java ArrayList去重案例

去除重复元素:

    public static ArrayList singleElement(ArrayList al) {
        //定义一个临时容器
        ArrayList newAl = new ArrayList();
        Iterator it = al.iterator();
        while (it.hasNext()) {
            Object obj = it.next();
            if (!newAl.contains(obj)) {
                newAl.add(obj);
            }
        }
        return newAl;
    }

自定义对象作为元素存到ArrayList中,并去除重复元素。

比如:存人对象。同姓名同年龄,视为同一个人,去除重复。

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

public class ArrayListDemo {
    public static void main(String[] args) {
        ArrayList al = new ArrayList();
        al.add(new Person("lisi01", 30));
        al.add(new Person("lisi02", 31));
        al.add(new Person("lisi03", 32));
        al.add(new Person("lisi04", 33));
        al.add(new Person("lisi04", 33));
        al.add(new Person("lisi04", 33));
        al = singleElement(al);
        Iterator it = al.iterator();
        while (it.hasNext()) {
            Person p = (Person) it.next();
            System.out.println(p.getName() + "--" + p.getAge());
        }

    }

    public static ArrayList singleElement(ArrayList al) {
        //定义一个临时容器
        ArrayList newAl = new ArrayList();
        Iterator it = al.iterator();
        while (it.hasNext()) {
            Object obj = it.next();
            if (!newAl.contains(obj)) {
                newAl.add(obj);
            }
        }
        return newAl;
    }
}

class Person {
    private String name;
    private int age;

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

    @Override
    public boolean equals(Object obj) {
        if (!(obj instanceof Person))
            return false;
        Person p = (Person) obj;
        return this.getName().equals(p.name) && this.getAge() == p.age;
    }

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

List集合判断元素是否相等,依据是元素的equals方法,contains调用的底层是equals方法,remove调用底层也是equals方法。

原文地址:https://www.cnblogs.com/hongxiao2020/p/12638163.html

时间: 2024-11-05 21:43:32

java ArrayList去重案例的相关文章

java ArrayList去重

定义一个Person的类,存入ArrayList集合中,去除重复元素,定义:名字相同的和年龄都相同的为重复元素. 取重 public class Qu { public static void main(String[] args) { Sa2 a = new Sa2("张三",20); Sa2 a1 = new Sa2("张三",30); Sa2 a3 = new Sa2("张三",20); ArrayList<Sa2> list

JAVA对象去重

JAVA对象去重比较恶心的说 需求:我要做的是去重每个权限的菜单,菜单表结构是 ID RoleID MenuID  获取的菜单表 应该是MenuID不能重复的 所以写菜单表的实体类,重写equals hashCode方法,让着2个作比较,下面代码中MenuID为主要比较的字段 package com.attendance.mvc.model; import com.jfinal.plugin.activerecord.Model; public class RoleMenu extends Mo

java之去重方式,以及效率问题

之前面试被问到关于java如何去重的问题,当时没怎么留意,今天刚好项目中用到了,所以记录一下. 实体类: /** * 用户类 */ class User{ private String username; private String password; public User(String username, String password) { this.username = username; this.password = password; } public String getUse

java多线程经典案例

/** * 典型案例:子线程执行10次,主线程执行100次,两者交替50次. */ package cn.itcast.lesson4; public class TestWaitNotify { public static void main(String[] args){ final Business business= new Business(); new Thread( new Runnable() { public void run() { for(int i=1;i<=50;i++

通过jstack定位在线运行java系统故障_案例1

问题描述: 在一个在线运行的java web系统中,会定时运行一个FTP上传的任务,结果有一天发现,文件正常生成后却没有上传. 问题初步分析: 1.查看日志文件 发现这个任务只打印了开始进入FTP处理的日志,但是没有打印FTP处理完成的日志. 从代码上看,FTP上传处理的代码异常保护都非常的好,如果出现异常,就会进行打印,而日志文件中却没有相关的信息,甚是奇怪.怀疑是FTP过程问题,如对方FTP服务器有什么问题导致,但是却找不到证据. 苦于无法窥探java运行系统内部信息,祭出杀手锏-jstac

Java ArrayList、Vector和LinkedList等的差别与用法(转)

Java ArrayList.Vector和LinkedList等的差别与用法(转) ArrayList 和Vector是采取数组体式格式存储数据,此数组元素数大于实际存储的数据以便增长和插入元素,都容许直接序号索引元素,然则插入数据要设计到数组元素移动等内存操纵,所以索引数据快插入数据慢,Vector因为应用了synchronized办法(线程安然)所以机能上比ArrayList要差,LinkedList应用双向链表实现存储,按序号索引数据须要进行向前或向后遍历,然则插入数据时只须要记录本项的

Java ArrayList 和 LinkedList区别

ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 1.对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的.对ArrayList而言,主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组重新进行分配:而对LinkedList而言,这个开销是统一的,分配一个内部Entry对象. 2.在ArrayList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动:而在LinkedList的中间插入或删除一

java学习项目案例分享视频资源地址

java学习项目案例分享视频资源地址 http://v.youku.com/v_show/id_XMjYxNjc4MTgwOA==.html?spm=a2hzp.8244740.userfeed.5!8~5~5~5!3~5~A你要的学习资料到了- web前端交流学习群21

Java ArrayList源码剖析

转自: Java ArrayList源码剖析 总体介绍 ArrayList实现了List接口,是顺序容器,即元素存放的数据与放进去的顺序相同,允许放入null元素,底层通过数组实现.除该类未实现同步外,其余跟Vector大致相同.每个ArrayList都有一个容量(capacity),表示底层数组的实际大小,容器内存储元素的个数不能多于当前容量.当向容器中添加元素时,如果容量不足,容器会自动增大底层数组的大小.前面已经提过,Java泛型只是编译器提供的语法糖,所以这里的数组是一个Object数组