內容不重複的Set
文章推薦指數: 80 %
package cc.openhome; import java.util. ... 以先前範例而言,若實作了 hashCode() 與 equals() 方法,則重複的 Students 將不會被收集:
回Java目錄
同樣是收集物件,在收集過程中若有相同物件,則不再重複收集,若你有這類需求,可以使用Set介面的實作物件。
例如,若有一個字串,當中有許多的英文單字,你希望知道不重複的單字有幾個,那麼你可以如下撰寫程式:
packagecc.openhome;
importjava.util.*;
publicclassWordCount{
publicstaticvoidmain(String[]args){
Stringline=input("請輸入英文:");
Set
一個執行的範例如下:
請輸入英文:Thisisadogthatisacatwhereisthestudent
不重複單字有9個:[that,cat,is,student,a,the,where,dog,This]
再來看以下的範例:
packagecc.openhome;
importjava.util.*;
classStudent{
privateStringname;
privateStringnumber;
Student(Stringname,Stringnumber){
this.name=name;
this.number=number;
}
@Override
publicStringtoString(){
returnString.format("(%s,%s)",name,number);
}
}
publicclassStudents{
publicstaticvoidmain(String[]args){
Set
事實上不只有HashSet,Java中許多要判斷物件是否重複時,都會呼叫hashCode()與equals()方法,因此規格書中建議,兩個方法必須同時實作。
以先前範例而言,若實作了hashCode()與equals()方法,則重複的Students將不會被收集:
packagecc.openhome;
importjava.util.*;
classStudent{
privateStringname;
privateStringnumber;
Student(Stringname,Stringnumber){
this.name=name;
this.number=number;
}
//NetBeans自動產生的equals()與hashCode()
//就示範而言已經足夠了
@Override
publicinthashCode(){//Objects有hash()方法可以使用//以下可以簡化為returnObjects.hash(name,number);
inthash=7;
hash=47*hash+Objects.hashCode(this.name);
hash=47*hash+Objects.hashCode(this.number);
returnhash;
}
@Override
publicbooleanequals(Objectobj){
if(obj==null){
returnfalse;
}
if(getClass()!=obj.getClass()){
returnfalse;
}
finalStudentother=(Student)obj;
if(!Objects.equals(this.name,other.name)){
returnfalse;
}
if(!Objects.equals(this.number,other.number)){
returnfalse;
}
returntrue;
}
@Override
publicStringtoString(){
returnString.format("(%s,%s)",name,number);
}
}
publicclassStudents{
publicstaticvoidmain(String[]args){
Set
執行結果如下,可看出不再收集重複的Students物件:
[(Justin,B835031),(Monica,B835032)]
延伸文章資訊
- 1JAVA Encapsulation(Java 封裝) , get/set method - Ocean 學習 ...
§JAVA封裝,get與set method 封裝觀念在物件導向中語沒有什麼不同,只是Java的get與set使用方式上與ActionScript3規則不太相同,以下將Java與AS3, ...
- 2java get set 例子_JAVA中关于set()和get()方法的理解以及使用
set()和get()方法的理解set和get这两个词的表面意思,set是设置的意思,而get是获取的意思 ... 然后我们来了解一下JAVA面向对象编程中的封闭性和安全性。
- 3封裝@ 阿葉的JAVA筆記 - 隨意窩
... 方法來存取屬性封裝實例public class Book{private String name; //屬性設為私有化並建立set及get方法public void setName(St...
- 4Lesson 9 : 封裝與建構式 - 創作大廳
使用set() and get() 這個公開方法來進行private 資料的存取。 ... Scanner scanner = new java.util. ... 讓我們以先前的Employe...
- 5JAVA程式語法_物件導向Part1_資料欄位屬性_屬性封裝(get/set ...
JAVA程式語法_物件導向Part1_資料欄位屬性_屬性封裝(get/set)_override方法_overloading方法 · 1.Return Type · 2.Name of the ...