java 不重复集合_java中的ArrayList 使得集合中的对象不重复

JAVA中的List接口存放的元素是可以重复的,在这个我重写对象里面的equals()方法,让集合里存放的对象不能重复

首先建一个类,在里面的main()方法中实现

list1中存放的是可以重复对象的集合,在新建了一个newlist,里面存放不能重复对象的集合

在迭代器中实现判断和存对象到newlist中。

新建的一个Man类,用于封装属性和重写equals()方法,实现两个对象的属性一样时,即判定为同一个对象

package com.tercher.demo;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

public class EqualsArray {

/*

* List集合中允许存入重复的元素,所以,

* 要使得集合中没有重复的元素,需要重写类的equals()方法

*/

public static void main(String[] args) {

List list1 = new ArrayList();

list1.add(new Man("json", "nan"));

list1.add(new Man("json", "nan"));

list1.add(new Man("json", "nv"));

list1.add(new Man("nana", "nv"));

ArrayList newlist = new ArrayList();

Iterator iter = list1.iterator();

//通过迭代器判断是否相等,并不同的对象加入新的集合中

/*

*ArrayList中的contain()方法,是查看集合是否包含此对象。有则返回true

*在调用此方法时,就会调用Man对象里面重写的equals()

*/

while (iter.hasNext()) {

Object object = iter.next();

Man man = (Man)object;

if (!newlist.contains(man)) {

newlist.add(man);

}

}

for (int i = 0; i < newlist.size(); i++) {

System.out.println("不重复的集合:"+newlist.get(i));

}

}

}

class Man{

private String name;

private String sex;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public Man(String name, String sex) {

super();

this.name = name;

this.sex = sex;

}

public Man() {

super();

}

@Override

//从写toString()方法,直接调用对象引用时输出

//否则就调用对象引用输出的是地址

public String toString() {

return "Man [name=" + name + ", sex=" + sex + "]";

}

@Override

//重写比较方法,当对象类型一样时,name和sex的值一样即为同一对象

public boolean equals(Object obj) {

//比较是否是 Man 类对象

if (!(obj instanceof Man)) {

return false;

}

Man man = (Man)obj;

System.out.println("调用equals方法:"+this+"和"+man);

return (this.name.equals(man.name))&& (this.sex.equals(man.sex));

}

}

Man类中重写了toString()方法,便于直接用对象的引用就可以输出对象的属性

下面是Man类中重写的equals()方法,首先判断这个obj对象是不是Man类的实例,然后再判断两个对象的属性是否一样。

在中间我输出了做比较的两个对象的属性。

最上面的main()方法中,用的ArrayList类中的contain()方法的源码如下:

71c507bf22a865799a20223a69abbe82.png

ec5ef3f189d55a9b922186f8e5561ce6.png

可以发现是在contain()方法中调用了对象的equals()方法。

所以最后得出newlist中存放的对象是不可以重复的。结果图如下:

4bf836ee0c9770f74c90fc839eb278be.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值