哈希集代码的意外运行时间
2022-09-01 15:58:42
所以最初,我有这个代码:
import java.util.*;
public class sandbox {
public static void main(String[] args) {
HashSet<Integer> hashSet = new HashSet<>();
for (int i = 0; i < 100_000; i++) {
hashSet.add(i);
}
long start = System.currentTimeMillis();
for (int i = 0; i < 100_000; i++) {
for (Integer val : hashSet) {
if (val != -1) break;
}
hashSet.remove(i);
}
System.out.println("time: " + (System.currentTimeMillis() - start));
}
}
在我的计算机上运行嵌套的for循环大约需要4秒,我不明白为什么花了这么长时间。外部循环运行 100,000 次,内部 for 循环应运行 1 次(因为 hashSet 的任何值都不会是 -1),从 HashSet 中删除项目是 O(1),因此应该有大约 200,000 次操作。如果一秒钟内通常有 100,000,000 个操作,为什么我的代码需要 4 秒才能运行?
此外,如果注释掉该行,则代码仅需要 16 毫秒。如果内部 for 循环被注释掉(但不是 ),则代码只需要 8 毫秒。hashSet.remove(i);
hashSet.remove(i);