在 java 循环中节省内存和 CPU
Saving memory and CPU in java loops
我写的这段(显而易见的)代码运行良好,但出于测试目的,我应该通过节省 CPU 周期并在合理的时间内使其适用于 "one million" 大小的数组尽可能多的内存。
有什么建议吗?
!!!数组按升序排列!!!
import java.util.Arrays;
class A {
static boolean exists(int[] ints, int k) {
for(int integer : ints){
if(integer == k){
return true;
}
}
return false;
}
您可以使用依赖于散列的 Set<Integer>
而不是顺序迭代的数组。
static boolean exists(Set<Integer> ints, int k) {
return ints.contains(k);
}
您可以将数组转换为 Set
并根据需要多次将其传递给方法:
Set<Integer> set = Arrays.stream(ints).boxed().collect(Collectors.toSet());
boolean isExist = exists(set, 15);
...
isExist = exists(set, 5005);
...
isExist = exists(set, 355);
由于您的数组是按升序排列的,您可以做的一件事(我认为)是进行二分搜索而不是线性搜索。
我写的这段(显而易见的)代码运行良好,但出于测试目的,我应该通过节省 CPU 周期并在合理的时间内使其适用于 "one million" 大小的数组尽可能多的内存。
有什么建议吗?
!!!数组按升序排列!!!
import java.util.Arrays;
class A {
static boolean exists(int[] ints, int k) {
for(int integer : ints){
if(integer == k){
return true;
}
}
return false;
}
您可以使用依赖于散列的 Set<Integer>
而不是顺序迭代的数组。
static boolean exists(Set<Integer> ints, int k) {
return ints.contains(k);
}
您可以将数组转换为 Set
并根据需要多次将其传递给方法:
Set<Integer> set = Arrays.stream(ints).boxed().collect(Collectors.toSet());
boolean isExist = exists(set, 15);
...
isExist = exists(set, 5005);
...
isExist = exists(set, 355);
由于您的数组是按升序排列的,您可以做的一件事(我认为)是进行二分搜索而不是线性搜索。