Java中Set集合特別講解
如何簡易區分集合
簡介
大家好,今天小編繼續給大家講解一下Set集合是如何去重。
眾所周知,set集合是有序且不重複的,但是要說set集合如何做到去重,我相信大家可能都不太瞭解,實際上,set集合去重主要體現在元素的hashcode和equals方法上面。這裡,小編又要給大家普及一下了:
HashSet處理方式是:先判斷兩個物件的hashCode方法是否一樣,如果不一樣,立即認為兩個物件equals不相等,並不呼叫equals方法,當hashCode相等時,再根據equals方法判斷兩個物件是否相等。
所以,當我們重寫hashCode和equals方法後,HashSet存值也會因為判斷唯一的條件發生變化。
案例
package com。yyz;
import java。util。*;
/**
* @program: JavaBasicProject
* @description: Set集合案例
* @author: yyz
* @create: 2021-08-12 22:51
*/
public class SetDemo {
public static void main(String[] args){
Professor s1 = new Professor(“a” , 10);
Professor s2 = new Professor(“a” , 10);
Professor s3 = new Professor(“b” , 10);
System。out。println(s1。equals(s2));
System。out。println(s1。equals(s3));
System。out。println(s1 == s2);
System。out。println(s1 == s3);
System。out。println(“————————————————”);
Set
studentSet。add(s1);
studentSet。add(s2);
studentSet。add(s3);
System。out。println(studentSet。toString());
}
}
//定義一個數組
class Professor{
String name ;
int age ;
public Professor(){
}
public Professor(String name , int age){
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;
}
@Override
public int hashCode() {
return this。name。hashCode() + this。age;
}
@Override
public boolean equals(Object obj) {
boolean result = false ;
if(!(obj instanceof Professor)){
result = false ;
}else if(obj。hashCode()!=this。hashCode()){
result = false ;
}else{
Professor s = (Professor)obj;
if((s。getName()。equals(this。getName())) && (s。getAge()==this。getAge())){
result = true ;
}
}
return result ;
}
@Override
public String toString() {
return “Student{” +
“name=‘” + name + ’\‘’ +
“, age=” + age +
‘}’;
}
}
結果演示
結果演示
總結
hashcode不同,equals不等,hashcode相同,equals可能不等;equals不等,hashcode不一定不等,equals相同,hashcode相等
想了解更多精彩內容,快來關注
萌寶寶乖咿呀呦喂