Java 哈希集的最大大小

Java 哈希集的最大大小,java,hashset,Java,Hashset,所以基本上我会随机生成10000个ip地址,我想存储在HashSet中找到的所有ip地址,但根据我的计算,大约找到6000个ip地址,但在HashSet中只存储了700个ip地址?HashSet在存储字符串方面是否有任何限制。如有任何建议,将不胜感激 Set<String> ipFine = new HashSet<String>(); long runs = 10000; while(runs > 0) {

所以基本上我会随机生成10000个ip地址,我想存储在HashSet中找到的所有ip地址,但根据我的计算,大约找到6000个ip地址,但在HashSet中只存储了700个ip地址?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--;

         }
Set ipFine=new HashSet();
长期运行=10000;
while(运行>0){
字符串ipAddress=generateIPAddress();
resp=SomeClass.getLocationByIp(ipAddress);
if(resp.getLocation()!=null){
ipFine.add(ipAddress);
}
运行--;
}
您确定您有6000个不同的IP地址吗?我猜你有6000个IP地址,但大多数都是重复的

你肯定不会遇到最大尺寸的问题


(请注意,您给出的代码无论如何都是无效的-您已经声明了两次
ipFine

就您而言,没有限制(限制是数组的最大大小,即2**31)

但是,
集合
只存储唯一的值,所以我猜您只生成了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个唯一值。

这是错误的。我宣布了两次。我已经把它去掉了。@RaihanJamal:你有没有可能同时修复压痕?它现在到处都是…可能9300次resp.getLocation()为null,或者generateIPAddress()返回相同的字符串?另一种可能性,不管多么遥远,是由于IP地址的相对结构化形式,您可能会遇到很多哈希冲突。即,多个不同的IP地址具有相同的哈希代码(用于确定该内容是否已在您的集合中)。不过,这不太可能。这绝对是家庭作业!添加了标记,那么我应该在if循环中调用什么。你能把这个部分也加入到if循环中吗。意味着如何重试并将其添加到HashSet。@RaihanJamal我已更改代码,以便您可以复制粘贴它