集合框架(去除ArrayList集合中的重複自定義對象元素案例)

學生類

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;

}

      


      //在Myeclipse裏面使用快捷鍵alt+shift+s快速自動重寫equals()方法

@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;

}


}



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());

}

}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章