利用二分查找获得List中小于并且最接近的数

博客内容介绍了如何通过二分查找优化老系统中的代码,以提高寻找历史记录中早于目标日期且最接近的日期的效率。原始代码使用for循环,但在5000个日期的列表中,如果目标日期在末尾,性能低下。采用二分查找后,显著减少了循环次数,提高了方法的运行速度。文章强调了深入理解数据结构和算法对于代码性能优化的重要性。
摘要由CSDN通过智能技术生成

引言

最近在老系统中看到了一大段代码,这个代码的目的是迁移迁移历史,在迁移的过程中需要很多计算,我大概看了一下代码,里面到处都是for 循环,虽然for循环的逻辑比较简单,但是循环的次数太多了, 这就导致这个方法非常的慢,其中有一个地方就是通过循环获得日期。

如果list中有5000个日期,恰好这个要查找的日期在最后面一个,那么肯定完蛋。 如果通过二分查找肯定会会少很多循环。

目标:找到集合中早于目标日期,并且最接近的一个日期,如果没有早于的则不返回

代码:

package com.zqf.platformweb.statistics.service;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author zhenghao
 * @description:
 * @date 2020/6/2118:45
 */
public class test {

    public static void main(String[] args) throws Exception {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Integer c = 0;
        //需要一个有序且不重复的数组
        List<Date> number = new ArrayList<>();
        number.add(sdf.parse("2010-04-10"));
        number.add(sdf.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

g-Jack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值