在使用集合中的contains(),要根据实际情况改写集合中对象的equals(Object obj)方法------改写List集合中equals(Object obj)的方法
生活随笔
收集整理的這篇文章主要介紹了
在使用集合中的contains(),要根据实际情况改写集合中对象的equals(Object obj)方法------改写List集合中equals(Object obj)的方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如標題,解釋都在代碼注釋中
主方法及目的
···
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 stubthis.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 stubthis.studentList = new ArrayList<Student>();}}···
可以試一試,將Student類中的equals()方法,注釋掉,看看什么情況,其實,在Eclips中,提供了便捷的方法幫助我們重寫equals方法,大家可以查查找找。
總結
以上是生活随笔為你收集整理的在使用集合中的contains(),要根据实际情况改写集合中对象的equals(Object obj)方法------改写List集合中equals(Object obj)的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 进击的创业猿
- 下一篇: Springboot——mybatis配