Java 哈希集的最大大小
所以基本上我会随机生成10000个ip地址,我想存储在HashSet中找到的所有ip地址,但根据我的计算,大约找到6000个ip地址,但在HashSet中只存储了700个ip地址?HashSet在存储字符串方面是否有任何限制。如有任何建议,将不胜感激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) {
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我已更改代码,以便您可以复制粘贴它