日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在使用集合中的contains(),要根据实际情况改写集合中对象的equals(Object obj)方法------改写List集合中equals(Object obj)的方法

發布時間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在使用集合中的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)的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。