判断ArryaList有没有重复对象的方法
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有没有重复对象的方法的更多相关文章
- List集合去除重复对象及equals()、hashCode()方法的作用
原文:https://blog.csdn.net/freelander_j/article/details/52211010 在java中,要将一个集合中重复的对象除去,如果这个集合中的数据类型是基本 ...
- 使用ObjectInputStream的readObject()方法如何判断读取到多个对象的结尾
摘自http://blog.csdn.net/fjdingsd/article/details/46765803 使用ObjectInputStream的readObject()方法如何判断读取到多个 ...
- 为Array对象添加一个去除重复项的方法
输入例子 [false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN].uniq() 输出例子 [false, true, unde ...
- js数组中去除重复对象及去除空对象的方法
(function(){//去除数组中重复对象 var unique = {}; arr.forEach(function(a){ unique[ JSON.stringify(a) ] = 1 }) ...
- javaScript定义对象的方法
转自souhu新闻http://news.sohu.com/20110215/n279335637.shtml? javascript定义对象的几种简单方法 1.构造函数方式,全部属性及对象的方法都放 ...
- Python判断列表是否已排序的各种方法及其性能分析
目录 Python判断列表是否已排序的各种方法及其性能分析 声明 一. 问题提出 二. 代码实现 2.1 guess 2.2 sorted 2.3 for-loop 2.4 all 2.5 numpy ...
- [UE4]复制引起的重复对象
一.在角色的BeginPlay事件中,在角色正前方1米到2米处生成一立方体. 二.开启2个玩家,第一个创建是服务器端,第二个窗口是客户端.可以看到:服务器端窗口创建了2个灰色的立方体,客户端却创建了4 ...
- 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 重点: 实现多级子目录的压缩, ...
- JavaScript (内置对象及方法)
JavaScript中的对象分为3种:内置对象.浏览器对象.自定义对象 JavaScript 提供多个内置对象:Math/Array/Number/String/Boolean... 对象只是带有属性 ...
随机推荐
- 【转】TOP10美国虚拟主机/网站空间推荐
原文:http://www.laozuo.org 不同的站长用户需要不同的主机产品,并不是所有的站长, 所有的网站都想放置在VPS服务器中的.虚拟主机也有虚拟主机的方便和优势,下面为老左精选的10个比 ...
- JavaScript中标识符的命名
JavaScript中的标识符的命名有以下规则: 由字母.数字.$._组成 以字母.$._开头 不可以使用保留字!!! 要有意义!!!!!!! 标识符的命名规范: 1.驼峰命名法 除标识符的第一个单词 ...
- Django(命名URL和URL反向解析)
day67 参考: https://www.cnblogs.com/liwenzhou/articles/8271147.html#autoid-1-4-0 反向解析URL 本 ...
- 几种int类型的范围
我们在编程的过程经常会遇到数据溢出的情况,于是这个时候我们必须定义能表示更大的数的数据类型来表示这个数. 下面列出了int型的范围: unsigned int 0-4294967295 ...
- [原创]K8飞刀20150720 新增Shellcode Loader支持多种格式
工具: K8飞刀编译: 自己查壳组织: K8搞基大队[K8team]作者: K8拉登哥哥博客: http://qqhack8.blog.163.com发布: 2015/7/20 3:00:18 简介: ...
- 基于alpine用dockerfile创建的nginx镜像
1.下载alpine镜像 [root@docker43 ~]# docker pull alpine Using default tag: latest Trying to pull reposito ...
- web工程迁移---weblogic8迁移到jboss5遇到的异常
原有的web工程是在weblogic8上运行的,但现在的要求是要运行到jboss5中,为如后迁移到更高版本的jboss做准备 由于我对weblogic没有过研究,所以之前的步骤都是有别人进行的,在进行 ...
- 链表的反转、合并(不借助额外list数组)
链表的基本操作:线性表 (单链表.循环链表-python实现) 反转链表: # -*- coding:utf-8 -*- class ListNode: def __init__(self, x): ...
- TensorFlow object detection API应用--配置
目标检测在图形识别的基础上有了更进一步的应用,但是代码也更加繁琐,TensorFlow专门为此开设了一个object detection API,接下来看看怎么使用它. object detectio ...
- linux之后台运行程序 nohup和& 的区别
1.nohup 用途:不挂断地运行命令,即使终端ssh关闭了也一直运行. 语法:nohup Command [ Arg … ] [ & ] 例:nohup start.sh & 无论是 ...