Java JDK 二分法 分析demo(推荐)

 更新时间:2017年07月19日 10:34:39   投稿:jingxian  
下面小编就为大家带来一篇Java JDK 二分法 分析demo(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

如下所示:

public class Test
{

  public static void main(String[] args)
  {
    Long[] arr = new Long[100000];
    for(int i =0;i<100000;i++)
    {
      arr[i] = (long) i;
    }

    System.out.println(binarySearch(arr, 3L));
    
    Comparable midVal = (Comparable) 2L;;
    System.out.println(midVal.compareTo(2l));
  }

  private static int binarySearch(Long[] arr, long l)
  {
    return binarySearch0(arr,0,arr.length,l);
  }

  private static int binarySearch0(Object[] a, int fromIndex, int toIndex, Object key)
  {
    int low = fromIndex;
    int high = toIndex - 1;

    while (low <= high)
    {
      int mid = (low + high) >>> 1;
      Comparable midVal = (Comparable) a[mid];
      int cmp = midVal.compareTo(key);

      if (cmp < 0)
        low = mid + 1;
      else if (cmp > 0)
        high = mid - 1;
      else
        return mid; // key found
    }
    return -(low + 1); // key not found.
  }

}

算法:当数据量很大适宜采用该方法。采用二分法查找时,数据需是有序不重复的。 基本思想:假设数据是按升序排序的,对于给定值 x,从序列的中间位置开始比较,如果当前位置值等于 x,则查找成功;若 x 小于当前位置值,则在数列的前半段中查找;若 x 大于当前位置值则在数列的后半段中继续查找,直到找到为止。

以上这篇Java JDK 二分法 分析demo(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Mybatis基于TypeHandler实现敏感数据加密

    Mybatis基于TypeHandler实现敏感数据加密

    业务场景中经常会遇到诸如用户手机号,身份证号,银行卡号,邮箱,地址,密码等等信息,属于敏感信息,本文就来介绍一下Mybatis基于TypeHandler实现敏感数据加密,感兴趣的可以了解一下
    2023-10-10
  • Springboot之@Controller注解不生效问题及解决

    Springboot之@Controller注解不生效问题及解决

    这篇文章主要介绍了Springboot之@Controller注解不生效问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • idea首次使用需要配置哪些东西

    idea首次使用需要配置哪些东西

    这篇文章主要介绍了idea首次使用需要配置哪些东西,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • RocetMQ搭建步骤与问题解决之道

    RocetMQ搭建步骤与问题解决之道

    这篇文章主要给大家介绍了关于RocetMQ搭建步骤与问题解决之道的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 教你怎么使用Optional处理null

    教你怎么使用Optional处理null

    今天教各位小伙伴怎么使用Optional处理null,文中有非常详细的代码示例,对正在学习java的小伙伴们有很大的帮助,需要的朋友可以参考下
    2021-05-05
  • Java编程伪共享与缓存行填充

    Java编程伪共享与缓存行填充

    这篇文章主要介绍了Java编程伪共享与缓存行填充,下面文章Disruptor提到的CPU缓存话题,做了一些尝试和研究,如Disruptor所说,CPU有缓存伪共享的问题,并且通过缓存行填充能完美的解决这个问题,需要的朋友可以参考一下
    2021-09-09
  • SpringBoot中使用JdbcTemplate访问Oracle数据库的案例详解

    SpringBoot中使用JdbcTemplate访问Oracle数据库的案例详解

    JdbcTemplate是Spring框架中的一个核心类,用于简化Java应用程序与关系型数据库的交互操作,本文给大家介绍SpringBoot中使用JdbcTemplate访问Oracle数据库的方法,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • 解决eclipse上传svn忽略target文件夹的坑

    解决eclipse上传svn忽略target文件夹的坑

    这篇文章主要介绍了解决eclipse上传svn忽略target文件夹的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • 轻松掌握java中介者模式

    轻松掌握java中介者模式

    这篇文章主要帮助大家轻松掌握java中介者模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • Springboot项目中如何让非Spring管理的类获得一个注入的Bean

    Springboot项目中如何让非Spring管理的类获得一个注入的Bean

    这篇文章主要介绍了Springboot项目中如何让非Spring管理的类获得一个注入的Bean问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12

最新评论