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. 深入解析SQL Server高可用镜像实现原理

    本文来自网易云社区 SQL Server 是windows平台.NET架构下标配数据库解决方案,与Oracle.MySQL共同构成了DB-Engines Ranking的第一阵营,在国内外企业市场中有 ...

  2. 【BZOJ3280】 小R的烦恼(费用流,建模)

    有很浓厚的熟悉感?餐巾计划问题? 不就是多了几个医院,相当于快洗部和慢洗部开了分店. 考虑建图: 如果把每一天拆成两个点,一个表示需求,另一个表示拥有的话. 显然就是一个两边的图,考虑如果我现在有人, ...

  3. vue中封装公共方法,全局使用

    1.以封装的合并单元格为例,首先建立一个util.js 2.在main.js中引用 3.直接在使用该方法的地方调用就可以了

  4. ThinkPHP5代码执行的简单分析

    漏洞影响版本: ThinkPHP 5.0.5-5.0.22 ThinkPHP 5.1.0-5.1.30 漏洞复现: 一.mac的debug环境搭建. 一键化环境搭建工具: mamp pro ,调试工具 ...

  5. 使用pymysql

    安装 pip3 install pymysql 连接.执行sql.关闭(游标) import pymysql mysql_connect_dict={ 'host':'127.0.0.1', 'por ...

  6. 将Python项目打包成EXE可执行文件(单文件,多文件,包含图片)

    解决 将Python项目打包成EXE可执行文件(单文件,多文件,包含图片) 1.当我们写了一个Python的项目时,特别是一个GUI项目,我们特备希望它能成为一个在Windows系统可执行的EXE文件 ...

  7. POJ 2876

    #include<iostream> #include<string> using namespace std; ]; int main() { //freopen(" ...

  8. 【下载】分享一个ida脚本,非常方便

    标 题: [下载]分享一个ida脚本,非常方便作 者: 梁萧时 间: 2013-09-05,13:32:14链 接: http://bbs.pediy.com/showthread.php?t=178 ...

  9. PPT-常用快捷键

    Ctrl+Shift+C   复制文本格式 Ctrl+Shift+V   粘贴文本格式 Ctrl+B 应用粗体格式Ctrl+U 应用下划线Ctrl+l 应用斜体格式 全选  Ctrl + A 光标之后 ...

  10. docker(三)docker镜像和镜像发布方法

    一.从公网docker hub 拉取image ~ # 搜索docker search centos~ » docker pull centos admin@steven- Using default ...