1. 程式人生 > >遍歷一個Set的方法只有一個:叠代器(interator)

遍歷一個Set的方法只有一個:叠代器(interator)

oid 能夠 sys 比較 hashcode 排列 兩個 fin span

Set-HashSet實現類:

遍歷一個Set的方法只有一個:叠代器(interator)。

HashSet中元素是無序的(這個無序指的是數據的添加順序和後來的排列順序不同),而且元素不可重復。

在Object中除了有final(),toString(),equals(),還有hashCode()。

HashSet底層用的也是數組。

當向數組中利用add(Object o)添加對象的時候,系統先找對象的hashCode:

int hc=o.hashCode(); 返回的hashCode為整數值。

Int I=hc%n;(n為數組的長度),取得余數後,利用余數向數組中相應的位置添加數據,以n為6為例,如果I=0則放在數組a[0]位置,如果I=1,則放在數組a[1]位置。如果equals()返回的值為true,則說明數據重復。如果equals()返回的值為false,則再找其他的位置進行比較。這樣的機制就導致兩個相同的對象有可能重復地添加到數組中,因為他們的hashCode不同。

如果我們能夠使兩個相同的對象具有相同hashcode,才能在equals()返回為真。

在實例中,定義student對象時覆蓋它的hashcode。

因為String類是自動覆蓋的,所以當比較String類的對象的時候,就不會出現有兩個相同的string對象的情況。

現在,在大部分的JDK中,都已經要求覆蓋了hashCode。

結論:如將自定義類用hashSet來添加對象,一定要覆蓋hashcode()和equals(),覆蓋的原則是保證當兩個對象hashcode返回相同的整數,而且equals()返回值為True。

 1 package TomTexts;
 2 
 3 public
class TomTexts_13 { 4 public static void main(String args[]) 5 { 6 int b[][]={{11},{21,22},{31,32,33,34}}; 7 int sum=0; 8 System.out.println("數組b的行數:"+b.length); 9 for(int I=0;I<b.length;I++) 10 { 11 System.out.println("b["+I+"]行的數據個數:"+b[I].length);
12 for(int j=0;j<b[I].length;j++) 13 { 14 sum=sum+b[I][j]; 15 } 16 } 17 System.out.println("數組元素的總和:"+sum); 18 } 19 20 }

遍歷一個Set的方法只有一個:叠代器(interator)