Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与其他ArrayList相比,Java是查找值索引的最快方法_Java_Performance_Arraylist - Fatal编程技术网

与其他ArrayList相比,Java是查找值索引的最快方法

与其他ArrayList相比,Java是查找值索引的最快方法,java,performance,arraylist,Java,Performance,Arraylist,我有个问题。在我的Java项目中,我有2个ArrayList。它们的定义如下: ArrayList<Candlestick> candlestickList1; ArrayList<Candlestick> candlestickList2; for (Candlestick candlestick1 : candlestickList1) { } 在循环中,我想找到candlestickList2中的对象的索引,该对象与循环中当前烛台的LocalDateTime相

我有个问题。在我的Java项目中,我有2个ArrayList。它们的定义如下:

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;
    }
}