欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java如何確定兩個區(qū)間范圍是否有交集

 更新時間:2023年12月21日 16:32:25   作者:張小洛  
這篇文章主要介紹了Java如何確定兩個區(qū)間范圍是否有交集問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

問題背景

日常工作項目中可能會遇到類似的針對兩個及以上的區(qū)間范圍來判斷是否有交集的場景;

可能是兩個日期時間段、地點(diǎn)距離區(qū)間、金額范圍區(qū)間等等。

第一次遇到難免會覺得兩個區(qū)間的可能性比較多,使用一一窮舉的方式顯然不行的, 這時候不妨換一種思路來思考就簡單清晰多了。

思路分析

如果首先考慮相交的情況是比較的,這個時候需要反其道而行,即考慮不相交的情況就相對簡單多了;

其實(shí)不相交的情況就兩種:

  • 兩者不連續(xù),區(qū)間1的范圍完全在區(qū)間2的范圍之前
  • 兩者不連續(xù),區(qū)間1的范圍完全在區(qū)間2的范圍之后

圖示如下:

情況A:如果成立,則必定有 EndRange1 < StartRange2

情況B:如果成立,則必定有 EndRange2 < StartRange1

綜上兩種情況可以得出:如果情況A或者情況B都不成立,則重疊必定存在 (如果一個區(qū)域既不是完全在另一個區(qū)域之后,也不是完全在另一個區(qū)域之前,那么它們必須重疊。)

根據(jù)摩根定律可得出:

Not (A Or B) <=> Not A And Not B

總結(jié)結(jié)論

由以上思路分析得出如果兩個區(qū)間范圍相交(重疊),則必定存在 (StartA <= EndB) and (EndA >= StartB);他的包含條件是邊完全相交(重疊)。

如果希望排除情況,請將>=操作符更改為>,將<=操作符更改為<

代碼示例

   @Test
   public void test01() {
 
        Double[] a = new Double[]{90D, Double.MAX_VALUE};
        Double[] b = new Double[]{10D, 90D};
        a = new Double[]{0D, 10D};
 
        boolean overlap = isIntervalOverlap(a, b);
        if (overlap) {
            System.out.println("相交");
        } else {
            System.out.println("不相交");
        }
    }
 
    private static boolean isIntervalOverlap(Double[] inrA, Double[] inrB) {
        if (inrA.length < 2 || inrB.length < 2) {
            throw new RuntimeException("區(qū)間范圍必須包含兩個值以上");
        }
        Arrays.sort(inrA);
        Arrays.sort(inrB);
 
        // (StartA <= EndB) and (EndA >= StartB)
        if (inrA[0] < inrB[inrB.length - 1] && inrA[inrA.length - 1] > inrB[0]) {
            return true;
        } else {
            return false;
        }
    }

最后

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

參考及拓展:Determine Whether Two Date Ranges Overlap

相關(guān)文章

  • 深入分析JAVA Vector和Stack的具體用法

    深入分析JAVA Vector和Stack的具體用法

    這篇文章主要介紹了深入分析JAVA Vector和Stack的具體用法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • Java通過反射來打印類的方法實(shí)現(xiàn)

    Java通過反射來打印類的方法實(shí)現(xiàn)

    本文主要介紹了Java通過反射來打印類的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java?輕松入門使用Fiddler抓包工具教程

    Java?輕松入門使用Fiddler抓包工具教程

    超文本傳輸協(xié)議(HTTP)是一個簡單的請求-響應(yīng)協(xié)議,其主要是基于TCP來實(shí)現(xiàn)的,可以通過Chrome開發(fā)者工具或者Wireshark或者Fiddler抓包,以便分析?HTTP?請求/響應(yīng)的細(xì)節(jié),本篇博客主要談?wù)撊绾问褂肍iddler抓取HTTP,當(dāng)然也可以抓取HTTPS
    2022-02-02
  • Spring Security6 最新版配置及實(shí)現(xiàn)動態(tài)權(quán)限管理

    Spring Security6 最新版配置及實(shí)現(xiàn)動態(tài)權(quán)限管理

    Spring Security 在最近幾個版本中配置的寫法都有一些變化,很多常見的方法都廢棄了,并且將在未來的 Spring Security7 中移除,因此又補(bǔ)充了一些新的內(nèi)容,重新發(fā)一下,供各位使用 Spring Security 的小伙伴們參考,需要的朋友可以參考下
    2024-03-03
  • Spring Cache擴(kuò)展功能實(shí)現(xiàn)過程解析

    Spring Cache擴(kuò)展功能實(shí)現(xiàn)過程解析

    這篇文章主要介紹了Spring Cache擴(kuò)展功能實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • Java利用cors實(shí)現(xiàn)跨域請求實(shí)例

    Java利用cors實(shí)現(xiàn)跨域請求實(shí)例

    本篇文章主要介紹了Java利用cors實(shí)現(xiàn)跨域請求實(shí)例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Springboot項目快速實(shí)現(xiàn)Aop功能

    Springboot項目快速實(shí)現(xiàn)Aop功能

    這篇文章主要介紹了Springboot項目如何快速實(shí)現(xiàn)Aop功能,對此方面感興趣的小伙伴可以詳細(xì)參考閱讀本文,本文有一定的參考價值
    2023-03-03
  • 關(guān)于java中線程安全問題詳解

    關(guān)于java中線程安全問題詳解

    最近工作中遇到不少多線程問題,但自己一直對多線程的理解比較表層,所以深入研究了一番,下面這篇文章主要給大家介紹了關(guān)于java中線程安全問題的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • JAVA編程實(shí)現(xiàn)UDP網(wǎng)絡(luò)通訊的方法示例

    JAVA編程實(shí)現(xiàn)UDP網(wǎng)絡(luò)通訊的方法示例

    這篇文章主要介紹了JAVA編程實(shí)現(xiàn)UDP網(wǎng)絡(luò)通訊的方法,簡單說明了UDP通訊的原理并結(jié)合實(shí)例形式分析了java實(shí)現(xiàn)UDP通訊的相關(guān)類與使用技巧,需要的朋友可以參考下
    2017-08-08
  • Java 多用戶登錄限制的實(shí)現(xiàn)方法

    Java 多用戶登錄限制的實(shí)現(xiàn)方法

    最近沒有事情做,閑的發(fā)呆,于是寫個東東練練手。這篇文章主要介紹了Java 多用戶登錄限制的實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下
    2016-11-11

最新評論