在使用集合中的contains(),要根據實際情況改寫集合中物件的equals(Object obj)方法------改寫List集合中equals(Object obj)的方法
阿新 • • 發佈:2019-02-03
如標題,解釋都在程式碼註釋中
主方法及目的
···
package cn.com.testCollection; import java.util.Iterator; import java.util.Scanner; /**此類是用於測試List集合中的contains()方法 * contains()方法,是用於判斷某個物件是否屬於該集合中的元素 * 它的原理是: * 1.遍歷出該集合中的每一個元素, * 2.呼叫每一個元素的equals()方法,來判斷該物件是否與該遍歷出元素是否是同一個 * 注意,這裡說的是同一個物件,但在實際的場景中,是要判斷物件中的內容是否一致, * 比如一個班級中,來了一個學生叫花花牛,需要給他定一個以姓名為準的稱號,如果班級裡 * 已經有一個花花牛了,那麼他的稱號只能是 花花牛一, * 顯然,equals()方法是比較物件的地址是否一樣,顯然不行,應該比較物件的的name的內容 * 那麼,這裡就需要 改寫 物件的 equals()方法了。詳見 Student類中 重寫的equals()方法。 * @author SZQ * */ public class TestColContains { static StudentCol sc = new StudentCol(); public static Scanner input; public static void main(String[] args) { Student st1 = new Student(1, "花花牛"); Student st2 = new Student(2, "小米"); Student st3 = new Student(3, "李磊"); Student st4 = new Student(4, "lucy"); Student st6 = new Student(6, "花花牛"); sc.studentSet.add(st1); sc.studentSet.add(st2); sc.studentSet.add(st3); sc.studentSet.add(st4); System.out.println("班級中已有的學生分別是"); for(Student ss : sc.studentSet){ System.out.println("學生是:"+ss.name); } System.out.println("請輸入新學生的姓名:"); input = new Scanner(System.in); String stuName = input.next(); Student newStu = new Student(5, stuName); Iterator it = sc.studentSet.iterator(); int count = 0; while(it.hasNext()){ if(it.next().equals(newStu)){ count++; } } if(count > 0) System.out.println("班級裡已經存在了"+count+"個名字叫做"+newStu.name+"的同學"); System.out.println("新學生的稱號是"+newStu.name+count); main(args); }
}
···
Student類,改寫equals()方法
···
package cn.com.testCollection; public class Student { public int id; public String name; public Student(int id,String name) { // TODO Auto-generated constructor stub this.id = id; this.name = name; } /** *重寫equals()方法 * */ @Override public boolean equals(Object obj){ //首先判斷是不是同一個物件 if(this == obj){ return true; } //判斷是不是null, 注意,傳入的引數可以為null,但是呼叫方法的物件不能null, //否則會引起 空指標異常,也就不能呼叫改寫的equals方法了。 if(obj == null){ return false; } if(!(obj instanceof Student)){ return false; } /* * 既然不是同一個物件,不是null ,同時他也屬於Student類的一個例項 * 那麼接下來只需要 判斷它的內容----姓名 ,是不是一樣 ,就行了 */ //先轉換為 Student類的型別。 Student st = (Student) obj; //判斷name是不是空的 //如果判斷多個屬性,比如id一樣也作為判斷條件,只需將下面的程式碼再比葫//蘆畫瓢寫一遍就行了 if(this.name == null){ if(st.name == null){ return true; }else{ return false; } }else{ if(this.name.equals(st.name)){ return true; }else{ return false; } } }
}
···
存放學生類集合的類
···
package cn.com.testCollection; import java.util.ArrayList; import java.util.List; public class StudentCol { public List<Student> studentList; public StudentCol() { // TODO Auto-generated constructor stub this.studentList = new ArrayList<Student>(); } }
···