開發者學堂課程【Java 進階程式設計:分析重複元素消除】學習筆記,與課程緊密聯系,讓使用者快速學習知識。
課程位址:
https://developer.aliyun.com/learning/course/20/detail/410分析重複元素消除
目錄:
一、 簡介
二、 範例:實作重複元素處理
三、 總結
一、 簡介
TreeSet 子類是利用了 Comparable 接口來實作了重複元素的判斷,但是 Set 集合的整體特征就是不允許儲存重複元素。
HashSet 判斷重複元素的方式并不是利用 Comparable 接口完成的,它利用的是Object 類中提供的方法實作的.
對象編碼:
public int hashCode(); .
對象比較:
public boolean equals(Object obj);
在進行重複元素判斷的時候首先利用 hashCode() 進行編碼的比對,如果該編碼不存在則表示資料不存在,證明沒有重複,如果該編碼存在了,則進一步進行對象比較處理,如果發現重複了,則此資料是不允許儲存的。如果使用的是 Eclipse 開發工具,則可以幫助開發者自動建立 hashCode() 與 equals() 方法,以此簡化我們的開發。
二、範例:實作重複元素處理
package cn.mldn.demo;
import java.util.Set;
class Person //比較器
private String name·3
private int age;
public Person(String name,int age)f
this.name = name;
this.age = age ;
@Override
public int hashCode()
final int prime=31;
int result =1;
result=prime* result + age;
result = prime*result +((name== nul1)? e: name.hashCode())
return result;
@Override
public boolean equals(Object obj) [
if (this == obj)
return true;
if (obj == null)
if (getClass()!= obj.getClass())
return false;
Person other =(Person) obj;
if (age l= other.age)
return false;
if (name== null)
if (other.name!= null)
return false;
] else if(!name.equals(other.name))
return false;
return true;
public String toString()
return "姓名:” + this.name +"、年齡:”+ this.age
public class JavaAPIDemo
public static void main(String[] args) throws Exception
[Setall= new HashSet();//為List父接口進行執行個體化
all.add(new Person("張三",19));
all.add(new Person("李四",19)); //年齡相同,但是姓名不同
all.add(new Person("王五”,20)) ;//資料重複
all.add(new Person("王五”,2e));//資料重複
all.add(new Person("小強”,78));
all.forEach(System.out::println);
三、總結
在 Java 程式之中真正的重複元素的判斷處理利用的就是 hashCode() 與 equals() 兩個方法共同作用完成的,而隻有在排序要求情況下 (TreeSet) 才會利用Comparable 接口來實作。