ArrayList类是List类下一种常用的子类,如果要判断容器里面的对象是否有相等,有两种方法。

  下面是自定义的一个Student类,假设容器里重复是按照对象的两个属性都相等。

/**
* @author Wangchengan
*
*/
public class Student {
private String name;
private int 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;
}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
public boolean equals(Object obj) {
//增加效率,如果是相同对象就不用比较了
if(this==obj)
return true;
//如果要比较的不是跟这个对象一样类型的就抛出一个运行时异常
if (!(obj instanceof Student)) {
throw new ClassCastException("类型错误");
}
//向下转型才能使用子类的方法
Student student=(Student)obj;
return this.name.equals(student.name)&&this.age==student.age;
} }

  下面是判断的两种方法,先使用了字符串作为演示。

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; public class ArrayListTest { public static void main(String[] args) {
/*
* ArrayList两种判断重复方法
1.遍历,使用两个循环
2.创建一个新的容器,旧容器中使用迭代器,没有则加入新容器
(其实contains方法里面也是使用了equls方法,只不过字符串的equals被复写了)
*/
List list=new ArrayList();
list.add("abc1");
list.add("abc4");
list.add("abc2");
list.add("abc1");
list.add("abc4");
list.add("abc4");
list.add("abc2");
list.add("abc1");
list.add("abc4");
list.add("abc2"); System.out.println(list);
singleElement2(list);
System.out.println(list);
System.out.println("------------");
/*
* ArrayList判断对象的方法
* 其实Arraylist里的contains方法是继承自Collection接口里的contains方法,使用的是equals方法
* 所以要判断对象里的属性的话,还是要复写对象类里的euals方法,同时它会自动调用
*
*/
List studentList=new ArrayList();
Student stu1=new Student("lisi", 20);
Student stu2=new Student("wangwu", 22);
Student stu3=new Student("liqing", 23);
Student stu4=new Student("liuhu", 27);
Student stu5=new Student("lisi", 20);
Student stu6=new Student("liqing", 23);
Student stu7=new Student("lisi", 20);
studentList.add(stu1);
studentList.add(stu2);
studentList.add(stu3);
studentList.add(stu4);
studentList.add(stu5);
System.out.println(studentList);
singleObject(studentList);
System.out.println(studentList); }
//判断Arraylist里面有没有重复对象的方法(给对象使用)
private static void singleObject(List studentList) {
singleElement2(studentList); } //判断Arraylist里面有没有重复对象的方法2
private static void singleElement2(List list) {
List newList=new ArrayList();
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
Object obj = (Object) iterator.next(); if (!newList.contains(obj)) {
newList.add(obj);
}
}
list.clear();
list.addAll(newList); }
//判断Arraylist里面有没有重复对象的方法1
private static void singleElement(List list) {
for (int i = 0; i < list.size()-1; i++) {
Object obj_x=list.get(i);
for (int j = i+1; j< list.size(); j++) {
if (obj_x.equals(list.get(j))) {
list.remove(j);
//每次都要减去一个,因为remove后数据元素会改变
j--;
} }
} } }

判断ArryaList有没有重复对象的方法的更多相关文章

  1. List集合去除重复对象及equals()、hashCode()方法的作用

    原文:https://blog.csdn.net/freelander_j/article/details/52211010 在java中,要将一个集合中重复的对象除去,如果这个集合中的数据类型是基本 ...

  2. 使用ObjectInputStream的readObject()方法如何判断读取到多个对象的结尾

    摘自http://blog.csdn.net/fjdingsd/article/details/46765803 使用ObjectInputStream的readObject()方法如何判断读取到多个 ...

  3. 为Array对象添加一个去除重复项的方法

    输入例子 [false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN].uniq() 输出例子 [false, true, unde ...

  4. js数组中去除重复对象及去除空对象的方法

    (function(){//去除数组中重复对象 var unique = {}; arr.forEach(function(a){ unique[ JSON.stringify(a) ] = 1 }) ...

  5. javaScript定义对象的方法

    转自souhu新闻http://news.sohu.com/20110215/n279335637.shtml? javascript定义对象的几种简单方法 1.构造函数方式,全部属性及对象的方法都放 ...

  6. Python判断列表是否已排序的各种方法及其性能分析

    目录 Python判断列表是否已排序的各种方法及其性能分析 声明 一. 问题提出 二. 代码实现 2.1 guess 2.2 sorted 2.3 for-loop 2.4 all 2.5 numpy ...

  7. [UE4]复制引起的重复对象

    一.在角色的BeginPlay事件中,在角色正前方1米到2米处生成一立方体. 二.开启2个玩家,第一个创建是服务器端,第二个窗口是客户端.可以看到:服务器端窗口创建了2个灰色的立方体,客户端却创建了4 ...

  8. C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志

    C#实现多级子目录Zip压缩解压实例 参考 https://blog.csdn.net/lki_suidongdong/article/details/20942977 重点: 实现多级子目录的压缩, ...

  9. JavaScript (内置对象及方法)

    JavaScript中的对象分为3种:内置对象.浏览器对象.自定义对象 JavaScript 提供多个内置对象:Math/Array/Number/String/Boolean... 对象只是带有属性 ...

随机推荐

  1. Python 私有变量中两个下划线 _ _item 与 一个下划线的区别 _item

    python中没有常量的说法, 但是可以通过元组实现一个常量 在python的私有变量中, 存在两个下划线 _ _item 与一个下划线 _item 的区别 前面带两个下划线的私有变量: 只能在本类中 ...

  2. USACO December 铂金Maxflow

    USACO 2015 December Contest, Platinum Problem 1. Max Flow Farmer John has installed a new system of ...

  3. 在centos使用redis几个坑

    问题来源 最近公司的平台需要做一些分布式的规划,其中会话我们打算用redis来存储,因为之前也有了解过redis,但都是在windows上使用,为了发挥redis的优势,这次我们打算直接在Linux上 ...

  4. Shell - 简明Shell入门04 - 判断语句(If)

    示例脚本及注释 #!/bin/bash var=$1 # 将脚本的第一个参数赋值给变量var if test $var # test - check file types and compare va ...

  5. D12——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D12 20180912内容纲要: 1.数据库介绍 2.RDMS术语 3.MySQL数据库介绍和基本使用 4.MySQL数据类型 5.MySQL常用命令 6.外键 ...

  6. MyBatis框架介绍及其实操

    一.基本概念和介绍 数据持久化的概念 数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称.例如,文件的存储.数据的读取等都是数据持久化操作.数据模型可以是任何数据 ...

  7. WebDriver高级应用实例(8)

    8.1使用Log4j在测试过程中打印日志 目的:在测试过程中,使用Log4j打印日志,用于监控和后续调试测试脚本 被测网页的网址: http://www.baidu.com 环境准备: (1)访问ht ...

  8. 04-01 Java switch、for、while、do while语句,循环嵌套,跳转语句break、continue、return

    语句 1:switch语句(掌握) (1)格式: switch(表达式) { case 值1: 语句体1; break; case 值2: 语句体2; break; ... default: 语句体n ...

  9. vue教程3-03 vue组件,定义全局、局部组件,配合模板,动态组件

    vue教程3-03 vue组件,定义全局.局部组件,配合模板,动态组件 一.定义一个组件 定义一个组件: 1. 全局组件 var Aaa=Vue.extend({ template:'<h3&g ...

  10. 不用函数库求一个数的平方根 (java版)

    一.题目 编写程序求一个整数的平方根,精确到小数点后三位 二.解法 1) 采用 牛顿迭代法. 2)牛顿迭代法简介 假设方程 在  附近有一个根,那么用以下迭代式子:                  ...