天天看點

分析重複元素消除|學習筆記

開發者學堂課程【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 接口來實作。

繼續閱讀