內容不重複的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 get set 例子_JAVA中关于set()和get()方法的理解以及使用
set()和get()方法的理解set和get这两个词的表面意思,set是设置的意思,而get是获取的意思 ... 然后我们来了解一下JAVA面向对象编程中的封闭性和安全性。
- 2【Java基礎】setter與getter方法- IT閱讀
寫一個函式,專門針對private變數,每當想要修改這個變數的時候,就呼叫這個set函式。 2.get:既然這個變數是private,那麼外部無法獲取這個變數的值 ...
- 3Java 入門指南- getter 與setter - 程式語言教學誌
介紹Java 中getter 與setter 的概念。 ... 誌》的範例程式http://pydoing.blogspot.com/ 檔名:Encrypt.java 功能:示範Java 程式作...
- 4【左京淳的JAVA學習筆記】第五章class定義與物件生成
通常會命名為set和get方法,利用這兩個方法來從物件裡存取資料。如範例中的setId()和getId()。 set資料的時候要準備引數,用來放進物件裡。 void ...
- 5內容不重複的Set
package cc.openhome; import java.util. ... 以先前範例而言,若實作了 hashCode() 與 equals() 方法,則重複的 Students 將不...