2012-03-16 200 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