我完成了 Yandex 竞赛中的任务,尝试了不同的语言,最后开始使用 Java。因此,第一个问题出现在使用最简单的 Set 时,程序在限制为 60 的情况下占用了 75Mb 内存(使用 Oracle Java8 编译器,使用 OpenJDK 已经有其他指标,您可以在帖子末尾看到报告)。输入数据大小:100000个数字;集合大小:63259 个数字。跨集合时也出现同样的结果,只是执行时间已经超出 1 秒多。我用原始程序尝试过,结果是一样的。
最简单的程序:
import java.util.Scanner;
public class Coditioner {
public static void main(String[] args) {
Integer t_room = 0, t_cond = 0;
Scanner in = new Scanner(System.in);
t_room = in.nextInt();
t_cond = in.nextInt();
String mode;
mode = in.next();
switch (mode) {
case "fan":
System.out.println(t_room);
break;
case "auto":
System.out.println(t_cond);
break;
case "heat":
if (t_room > t_cond)
System.out.println(t_room);
else
System.out.println(t_cond);
break;
case "freeze":
if (t_room < t_cond) {
System.out.println(t_room);
}
else
System.out.println(t_cond);
break;
default:
break;
}
in.close();
}
}
简单集合的结果(输入数据 - 100000 个数字,时间限制 - 1 秒,内存限制 - 60 MB):
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class A_Count_Of_Diff_Nums {
public static void main(String[] args) {
Set<Integer> set = new HashSet<Integer>();
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
set.add(in.nextInt());
}
in.close();
System.out.println(set.size());
}
}
其中 ML 表示超出内存使用限制。
Java为什么会给出这样的结果?


