【发布时间】:2019-10-01 07:13:17
【问题描述】:
我想替换提供的列表中的一个对象,或者如果不在此列表中,则添加它。我需要最快的方式来执行此插入/更新。
我有两个版本。哪个更快或者你知道更快的方法吗?
版本 1:
void update(List<Task> orderedTask, Task task) {
int idx = Collections.binarySearch(orderedTask, task);
if (idx >= 0) {
orderedTask.remove(idx);
orderedTask.add(idx, task);
} else {
orderedTask.add(-idx - 1, task);
}
}
第 2 版:
void update2(List<Task> orderedTask, Task task) {
var idx = orderedTask.indexOf(task);
if(idx >= -1) {
orderedTask.remove(idx);
orderedTask.add(idx, task);
}
else {
orderedTask.add(-idx - 1, task);
}
}
我猜,java 流并不比上面的方法快..
【问题讨论】:
-
为什么不使用
Set? -
因为我必须保留订单。而且我不知道 LinkedHashSet 对于这种情况是否会更好..
-
LinkedHashMap 或 LinkedHashSet,它会保持顺序。列表搜索速度很慢,你需要做一个。
-
那么
update2方法中的orders是什么?可能是错字? -
BinarySearch 比 indexOf() 快在这里检查:stackoverflow.com/questions/32495416/indexof-or-binary-search
标签: java collections java-stream