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中存放的對象是不可以重復的。結果圖如下: