【发布时间】:2018-06-27 12:45:47
【问题描述】:
我正在使用一个巨大的 ArrayList 和下面的代码
public final List<MyClass> list = new ArrayList<>();
public void update(MyClass myClass) {
int i;
for (i=0; i < list.size(); i++) {
if (myClass.foo(list.get(i))) {
list.set(i, myClass);
break;
}
}
if (i == list.size()) {
list.add(myClass);
}
}
列表非常大。在这种情况下,我还可以做些什么来提高性能?也许使用一些 Java 8 功能,替换 ArrayList 或类似的东西。
与此列表相关的另一个运行时间过长的代码是下面的代码:
public List<MyClass> something(Integer amount) {
list.sort((m1, m2) -> Double.compare(m2.getBar(), m1.getBar()));
return list.stream()
.limit(amount)
.collect(Collectors.toList());
}
欢迎大家帮忙,谢谢
【问题讨论】:
-
Arrays 比 ArrayLists 快得疯狂,所以如果你可以将你的结构从 ArrayList 更改为 Array,你会大大提高性能。但是,从 ArrayList 更改为 Array 可能很困难。
-
foo 函数有什么作用?您的列表中有多少个对象?
-
@ValentinMichalak foo 函数只需将当前对象与参数 objet 与等号进行比较。我的列表中有上千个对象
-
我认为 ArrayList 不是正确的数据模型。为什么你不使用 HashMap ?
-
您只是在比较
equals- 这就是Maps 的用途!当amount远小于list.size()时,第二个问题可能会变得更快,但也许更简单——只需告诉我们Bar与equals 的关系即可。
标签: java performance arraylist collections