集合框架-去重自定義物件案例

ZHOU_VIP發表於2017-04-23

B:去除集合中的多個自定義物件的重複元素

    如果自定義物件的成員變數值都相同,即為重複元素


package cn.itcast_04;

import java.util.ArrayList;
import java.util.Iterator;

/*
 * 需求:去除集合中自定義物件的重複值(物件的成員變數值都相同)
 * 
 * 我們按照和字串一樣的操作,發現出問題了。
 * 為什麼呢?
 * 		我們必須思考哪裡會出問題?
 * 		通過簡單的分析,我們知道問題出現在了判斷上。
 * 		而這個判斷功能是集合自己提供的,所以我們如果想很清楚的知道它是如何判斷的,就應該去看原始碼。
 * contains()方法的底層依賴的是equals()方法。
 * 而我們的學生類中沒有equals()方法,這個時候,預設使用的是它父親Object的equals()方法
 * Object()的equals()預設比較的是地址值,所以,它們進去了。因為new的東西,地址值都不同。
 * 按照我們自己的需求,比較成員變數的值,重寫equals()即可。
 * 自動生成即可。
 */
public class ArrayListDemo3 {
	public static void main(String[] args) {
		// 建立集合物件
		ArrayList array = new ArrayList();

		// 建立學生物件
		Student s1 = new Student("林青霞", 27);
		Student s2 = new Student("林志玲", 40);
		Student s3 = new Student("鳳姐", 35);
		Student s4 = new Student("芙蓉姐姐", 18);
		Student s5 = new Student("翠花", 16);
		Student s6 = new Student("林青霞", 27);
		Student s7 = new Student("林青霞", 18);

		// 新增元素
		array.add(s1);
		array.add(s2);
		array.add(s3);
		array.add(s4);
		array.add(s5);
		array.add(s6);
		array.add(s7);

		// 建立新集合
		ArrayList newArray = new ArrayList();

		// 遍歷舊集合,獲取得到每一個元素
		Iterator it = array.iterator();
		while (it.hasNext()) {
			Student s = (Student) it.next();

			// 拿這個元素到新集合去找,看有沒有
			if (!newArray.contains(s)) {
				newArray.add(s);
			}
		}

		// 遍歷新集合
		for (int x = 0; x < newArray.size(); x++) {
			Student s = (Student) newArray.get(x);
			System.out.println(s.getName() + "---" + s.getAge());
		}
	}
}


package cn.itcast_04;

public class Student {
	private String name;
	private int age;

	public Student() {
		super();
	}

	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = 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;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}

}





相關文章