2012-03-16 277 views
1

所以基本上我生成隨機10000個IP地址,我想存儲所有那些在HashSet中找到的IP地址,但根據我的計算大約6000個IP地址被發現但在HashSet中只有700個IP地址正在獲取存儲在哪裏?在存儲字符串方面,HashSet是否存在任何限制。任何建議將不勝感激。HashSet的最大尺寸

Set<String> ipFine = new HashSet<String>(); 
     long runs = 10000; 
      while(runs > 0) { 

      String ipAddress = generateIPAddress(); 

      resp = SomeClass.getLocationByIp(ipAddress); 

      if(resp.getLocation() != null) { 

       ipFine.add(ipAddress); 
         } 

       runs--; 

     } 
+0

也許9300次resp.getLocation()爲null或generateIPAddress()返回相同的String? – DaveFar 2012-03-16 22:27:04

+0

另一種可能性,無論是遠程,是由於相對結構化的IP地址形式,您可能會遇到很多散列衝突。即幾個不同的IP地址具有相同的hashCode(用於確定該事件是否已經在您的集合中)。雖然這不太可能。 – Jochen 2012-03-16 22:41:35

+0

這絕對是功課! http://stackoverflow.com/questions/9745459/store-distinct-ip-address-in-hashset添加標籤 – Bohemian 2012-03-16 22:57:50

回答

4

至於你而言,沒有限制(限制是最大尺寸一個數組,它是2 ** 31)。

但是,Sets只存儲獨特的值,所以我的猜測是,你只生成了700個獨特的地址。

修改代碼如下:

if(resp.getLocation() != null) { 
    if (ipFine.add(ipAddress)) { // add() returns true if the value is unique 
     runs--; // only decrement runs if it's a new value 
    } 
} 

此修改將意味着你會不斷循環,直到你得到10000個獨特值。

+0

,那麼我應該在if循環中調用什麼。你可以在if循環中添加該部分嗎?意味着我如何再次嘗試並將其添加到HashSet。 – ferhan 2012-03-16 22:41:21

+0

@RaihanJamal我已經更改了代碼,以便您可以將其複製粘貼到 – Bohemian 2012-03-16 22:47:59

4

你確定你有6000個不同 IP地址?我的猜測是,你有6000個IP地址,但其中大多數是重複的...

你絕對是而不是遇到最大尺寸問題。

(請注意,你給的代碼是不是有效呢 - 你聲明ipFine兩次)

+0

這是錯誤的。我宣佈了兩次。我已經刪除了。 – ferhan 2012-03-16 22:21:57

+0

@RaihanJamal:你有可能同時修正縮進嗎?這一切都在這個時刻...... – 2012-03-16 22:26:15