在使用集合中的contains(),要根据实际情况改写集合中对象的equals(Object obj)方法------改写List集合中equals(Object obj)的方法
生活随笔
收集整理的這篇文章主要介紹了
在使用集合中的contains(),要根据实际情况改写集合中对象的equals(Object obj)方法------改写List集合中equals(Object obj)的方法
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
如標(biāo)題,解釋都在代碼注釋中
主方法及目的
···
package cn.com.testCollection; import java.util.Iterator; import java.util.Scanner;/**此類是用于測(cè)試List集合中的contains()方法* contains()方法,是用于判斷某個(gè)對(duì)象是否屬于該集合中的元素* 它的原理是:* 1.遍歷出該集合中的每一個(gè)元素,* 2.調(diào)用每一個(gè)元素的equals()方法,來(lái)判斷該對(duì)象是否與該遍歷出元素是否是同一個(gè)* 注意,這里說(shuō)的是同一個(gè)對(duì)象,但在實(shí)際的場(chǎng)景中,是要判斷對(duì)象中的內(nèi)容是否一致,* 比如一個(gè)班級(jí)中,來(lái)了一個(gè)學(xué)生叫花花牛,需要給他定一個(gè)以姓名為準(zhǔn)的稱號(hào),如果班級(jí)里* 已經(jīng)有一個(gè)花花牛了,那么他的稱號(hào)只能是 花花牛一,* 顯然,equals()方法是比較對(duì)象的地址是否一樣,顯然不行,應(yīng)該比較對(duì)象的的name的內(nèi)容* 那么,這里就需要 改寫 對(duì)象的 equals()方法了。詳見(jiàn) 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("班級(jí)中已有的學(xué)生分別是");for(Student ss : sc.studentSet){System.out.println("學(xué)生是:"+ss.name);}System.out.println("請(qǐng)輸入新學(xué)生的姓名:");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("班級(jí)里已經(jīng)存在了"+count+"個(gè)名字叫做"+newStu.name+"的同學(xué)");System.out.println("新學(xué)生的稱號(hào)是"+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){//首先判斷是不是同一個(gè)對(duì)象if(this == obj){return true;}//判斷是不是null, 注意,傳入的參數(shù)可以為null,但是調(diào)用方法的對(duì)象不能null,//否則會(huì)引起 空指針異常,也就不能調(diào)用改寫的equals方法了。if(obj == null){return false;}if(!(obj instanceof Student)){return false;}/** 既然不是同一個(gè)對(duì)象,不是null ,同時(shí)他也屬于Student類的一個(gè)實(shí)例* 那么接下來(lái)只需要 判斷它的內(nèi)容----姓名 ,是不是一樣 ,就行了*///先轉(zhuǎn)換為 Student類的類型。Student st = (Student) obj;//判斷name是不是空的//如果判斷多個(gè)屬性,比如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;}} }}
···
存放學(xué)生類集合的類
···
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()方法,注釋掉,看看什么情況,其實(shí),在Eclips中,提供了便捷的方法幫助我們重寫equals方法,大家可以查查找找。
總結(jié)
以上是生活随笔為你收集整理的在使用集合中的contains(),要根据实际情况改写集合中对象的equals(Object obj)方法------改写List集合中equals(Object obj)的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 进击的创业猿
- 下一篇: 齐振宏教授 变革领导力导师