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()方法的源碼如下:

可以發現是在contain()方法中調用了對象的equals()方法。

所以最后得出newlist中存放的對象是不可以重復的。結果圖如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM