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()方法的源码如下:
可以发现是在contain()方法中调用了对象的equals()方法。
所以最后得出newlist中存放的对象是不可以重复的。结果图如下: