Java中ArrayList去除重复元素(包括字符串和自定义对象)

 更新时间:2017年03月10日 11:14:06   作者:码上猿梦  
本文主要介绍了Java中ArrayList去除重复元素(包括字符串和自定义对象)的方法。具有很好的参考价值。下面跟着小编一起来看下吧

1.去除重复字符串

package com.online.msym;
import java.util.ArrayList;
import java.util.Iterator;
@SuppressWarnings({ "rawtypes", "unchecked" })
public class Demo1_ArrayList {  
  public static void main(String[] args) {
    ArrayList list = new ArrayList();
    list.add("a");
    list.add("a");
    list.add("b");
    list.add("b");
    list.add("c");
    list.add("c");
    list.add("c");
    list.add("c");
    ArrayList newList = getSingle(list);
    System.out.println(newList);
  }
  /*
   * 创建新集合将重复元素去掉
   * 1,明确返回值类型,返回ArrayList
   * 2,明确参数列表ArrayList
   * 
   * 分析:
   * 1,创建新集合
   * 2,根据传入的集合(老集合)获取迭代器
   * 3,遍历老集合
   * 4,通过新集合判断是否包含老集合中的元素,如果包含就不添加,如果不包含就添加
   */
  public static ArrayList getSingle(ArrayList list) {
    ArrayList tempList = new ArrayList();          //1,创建新集合
    Iterator it = list.iterator();              //2,根据传入的集合(老集合)获取迭代器
    while(it.hasNext()) {                  //3,遍历老集合
      Object obj = it.next();                //记录住每一个元素
      if(!tempList.contains(obj)) {            //如果新集合中不包含老集合中的元素
        tempList.add(obj);                //将该元素添加
      }
    }  
    return tempList;
  }
}

2.去除ArrayList中重复自定义对象元素

注意事项:必须重写equals()方法的,因为contains方法和remove方法底层都依赖于equals方法

package com.online.msym;
import java.util.ArrayList;
import java.util.Iterator;
import online.msym.bean.Person;
@SuppressWarnings({ "rawtypes", "unchecked" })
public class Demo2_ArrayList {
  /**
   * * 需求:ArrayList去除集合中自定义对象元素的重复值(对象的成员变量值相同,即同姓名同年龄)
     :注意事项: 重写equals()方法的
    contains方法判断是否包含,底层依赖的是equals方法
    remove方法判断是否删除,底层依赖的是equals方法
   */
  public static void main(String[] args) {
    ArrayList list = new ArrayList();        //创建集合对象
     list.add(new Person("张三", 23));
    list.add(new Person("张三", 23));
    list.add(new Person("李四", 24));
    list.add(new Person("李四", 24));
    list.add(new Person("李四", 24));
    list.add(new Person("李四", 24));
    //ArrayList newList = getSingle(list);      //调用方法去除重复
    //System.out.println(newList);
    list.remove(new Person("张三", 23));
    System.out.println(list);
  }
  /*
   * 创建新集合将重复元素去掉
   * 1,明确返回值类型,返回ArrayList
   * 2,明确参数列表ArrayList
   * 
   * 分析:
   * 1,创建新集合
   * 2,根据传入的集合(老集合)获取迭代器
   * 3,遍历老集合
   * 4,通过新集合判断是否包含老集合中的元素,如果包含就不添加,如果不包含就添加
   */
  public static ArrayList getSingle(ArrayList list) {
    ArrayList tempList = new ArrayList<>();          //1,创建新集合
    Iterator it = list.iterator();              //2,根据传入的集合(老集合)获取迭代器
    while(it.hasNext()) {                  //3,遍历老集合
      Object obj = it.next();                //记录住每一个元素
      if(!tempList.contains(obj)) {            //如果新集合中不包含老集合中的元素
        tempList.add(obj);                //将该元素添加
      }
    }
    return tempList;
  }
}

Person实体类:

package online.msym.bean;
public class Person {
  private String name;
  private int age;
  public Person() {
    super();
  }
  public Person(String name, int age) {
    super();
    this.name = name;
    this.age = 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;
  }
  @Override
  public String toString() {
    return "Person [name=" + name + ", age=" + age + "]";
  }
  //重写equals方法,用于判断连个Person对象是否相同
  @Override
  public boolean equals(Object obj) {
    Person p = (Person)obj;
    System.out.println("equals 方法被调用了,证明contains方法底层调用的是equals");
    return this.name.equals(p.name) && this.age == p.age;
  }
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

相关文章

  • Java类初始化顺序详解

    Java类初始化顺序详解

    这篇文章主要介绍了Java类初始化顺序详解,java语言在使用过程中最先开始就是初始化,在工作中如果遇到什么问题需 要定位往往到最后也可能是初始化的问题,因此掌握初始化的顺序很重要,需要的朋友可以参考下
    2023-08-08
  • java动态线程池的简单实现思路

    java动态线程池的简单实现思路

    本文主要介绍了java 动态线程池的简单实现思路,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 深入浅析Java 循环中标签的作用

    深入浅析Java 循环中标签的作用

    这篇文章主要介绍了深入浅析Java 循环中标签的作用的相关资料,需要的朋友可以参考下
    2016-02-02
  • shrio中hashedCredentialsMatcher密码匹配示例详解

    shrio中hashedCredentialsMatcher密码匹配示例详解

    shrio是一个轻量级权限管理框架,密码的匹配由框架内部完成。密码是否匹配由接口CredentialsMatcher定义实现类完成,CredentialsMatcher实现类有SimpleCredentialsMatcher和HashedCredentialsMatcher两个
    2021-10-10
  • Springboot访问templates html页面过程详解

    Springboot访问templates html页面过程详解

    这篇文章主要介绍了Springboot访问templates html页面过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 详解mybatis @SelectProvider 注解

    详解mybatis @SelectProvider 注解

    这篇文章主要介绍了mybatis @SelectProvider 注解的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-12-12
  • Java优化for循环嵌套的高效率方法

    Java优化for循环嵌套的高效率方法

    这篇文章主要介绍了Java优化for循环嵌套的高效率方法,帮助大家更好的提升java程序性能,感兴趣的朋友可以了解下
    2020-09-09
  • Java使用httpRequest+Jsoup爬取红蓝球号码

    Java使用httpRequest+Jsoup爬取红蓝球号码

    本文将结合实例代码,介绍Java使用httpRequest+Jsoup爬取红蓝球号码,需要的朋友们下面随着小编来一起学习学习吧
    2021-07-07
  • 详细总结Java堆栈内存、堆外内存、零拷贝浅析与代码实现

    详细总结Java堆栈内存、堆外内存、零拷贝浅析与代码实现

    零拷贝,这是个耳熟能详的名词,是开发岗面试中经常提及的问题.最近在回顾Netty的基础原理,还是把NIO中关于堆外内存的知识点过了一遍,这里就针对堆栈内存 堆外内存和零拷贝这几个概念以及相关知识做一下记录,需要的朋友可以参考下
    2021-05-05
  • Java连接 JDBC基础知识(操作数据库:增删改查)

    Java连接 JDBC基础知识(操作数据库:增删改查)

    这篇文章主要介绍了Java连接 JDBC基础知识,包括操作数据库之增删改查操作,需要的朋友可以参考下
    2021-04-04

最新评论