哈希集.在大集中表现缓慢

Pit*_*elk 6 java performance hashset

我遇到了一个问题,我无法找到解决方案.我正在使用HashSet来存储值.我存储的值是自定义类型Cycles,其中我已重写HashCode并等于如下,以确保缓慢的性能不受hascode或相等方法的影响我还将hashset的初始容量设置为10.000 .000

@Override
public int hashCode() {
 final int prime = 31;
 int result = 1;
 result = prime * result + (int) (cycleId ^ (cycleId >>> 32));
 return result;
}

@Override
public boolean equals(Object obj) {
 if (this == obj)
 return true;
 if (obj == null)
 return false;
 if (getClass() != obj.getClass())
 return false;
 Cycle other = (Cycle) obj;
 if (cycleId != other.cycleId)
 return false;
 return true;
}
Run Code Online (Sandbox Code Playgroud)

在第一个1.500.000第一个值之后,当我尝试添加一个新值(使用HashSet类的add方法)时,程序非常慢.最终我将在存储的值达到1.600.000之前让java内存异常(线程中的异常"Thread-0"java.lang.OutOfMemoryError:Java堆空间)

我使用的IDE是Eclipse.所以下一步是将JVM堆大小从默认值增加到1千兆(使用commnads Xmx1000M和Xms1000M)现在,elipse以可用内存的10倍开始(我可以看到右下角的总堆大小)显示内存和使用的内存)但同样我有相同的"慢"性能和相同的内存错误在相同的值(之前的1.500.000和1.600.000之前)非常奇怪.

有谁知道它可能是什么问题?

先感谢您

Dev*_*ler 10

您不希望为Eclipse增加JVM堆,您希望为您的程序设置它.

转到"运行">"运行配置"(或" 调试配置")并在其中设置VM选项.