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 = new HashSet();

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 +

‘}’;

}

}

結果演示

Java中Set集合特別講解

結果演示

總結

hashcode不同,equals不等,hashcode相同,equals可能不等;equals不等,hashcode不一定不等,equals相同,hashcode相等

想了解更多精彩內容,快來關注

萌寶寶乖咿呀呦喂