与其他ArrayList相比,Java是查找值索引的最快方法
我有个问题。在我的Java项目中,我有2个ArrayList。它们的定义如下:与其他ArrayList相比,Java是查找值索引的最快方法,java,performance,arraylist,Java,Performance,Arraylist,我有个问题。在我的Java项目中,我有2个ArrayList。它们的定义如下: ArrayList<Candlestick> candlestickList1; ArrayList<Candlestick> candlestickList2; for (Candlestick candlestick1 : candlestickList1) { } 在循环中,我想找到candlestickList2中的对象的索引,该对象与循环中当前烛台的LocalDateTime相
ArrayList<Candlestick> candlestickList1;
ArrayList<Candlestick> candlestickList2;
for (Candlestick candlestick1 : candlestickList1) {
}
在循环中,我想找到candlestickList2中的对象的索引,该对象与循环中当前烛台的LocalDateTime相比获得了最接近的LocalDateTime,但是candlestickList2的LocalDateTime必须低于当前烛台
我在考虑每轮比较一次,但我不知道这是否是一百万个物体的最快方式
有人能给我解释一下我是如何以最快的方式做到这一点的吗?因为现在一切都是关于性能的 我会使用
NavigableSet<CandleStick> set = new TreeSet<>(
Comparator.comparing(CandleStick::getTime));
打印出类似于
[time = 1, time = 2, time = 3, time = 4, time = 5, time = 6, time = 7, time = 8,
time = 9]
time = 10 --> time = 9
time = 5 --> time = 4
time = 18 --> time = 9
这说明了这个概念。实际上如何实现它还可以添加一些改进,比如不必在循环中创建新的CandleStick类
班级
class CandleStick {
int time;
public CandleStick(int time) {
this.time = time;
}
public Integer getTime() {
return time;
}
public String toString() {
return "time = " + time;
}
}
难道你们不能把索引存储在烛台上,然后根据时间进行排序和二进制搜索吗?或者,如果时间在O1时间内没有重复索引,你不能用set代替list吗?是的,二进制搜索非常好,也可以使用快速排序。我已经在unixtimestap上对烛台进行了排序,很抱歉没有提到它!但这两个阵列列表是不同的烛台时期。这意味着我可以有5分钟的时间:2021-01-10 12:00:00。然后我想得到第二个列表的时间2021-01-10 12:05:00,周期为15分钟。我不需要for循环中的可变烛台吗?是的。请参阅我的最新答案。老实说,我不能谈论相对性能,但API的方法相当有效
class CandleStick {
int time;
public CandleStick(int time) {
this.time = time;
}
public Integer getTime() {
return time;
}
public String toString() {
return "time = " + time;
}
}