最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java算法之位圖的概念和實現(xiàn)詳解

 更新時間:2023年10月26日 10:44:43   作者:CodeJiao  
這篇文章主要介紹了Java算法之位圖的概念和實現(xiàn)詳解,位圖可以利用每一位來對應一個值,比如可以利用int類型的數(shù)去存儲0~31這個集合的數(shù)字,如果該集合內(nèi)的數(shù)字存在,則把對應的位設置位1默認為0,需要的朋友可以參考下

位圖的介紹

位圖可以利用每一位來對應一個值,比如可以利用int類型的數(shù)去存儲0~31這個集合的數(shù)字。如果該集合內(nèi)的數(shù)字存在,則把對應的位設置位1(默認為0)。

在這里插入圖片描述

如果要存儲的集合元素范圍超過了32個,則可以用int數(shù)組去實現(xiàn)位圖,第一個數(shù)組元素保存0~31的元素,第二個數(shù)組元素保存32~63的數(shù)組元素。

位圖的好處就是可以節(jié)省大量的空間,缺點是實現(xiàn)比較復雜。

注意:

并不是說int類型的位圖只可以存儲0~31的集合元素,也可以存儲例如5~36的元素,在存儲的時候設置一下規(guī)則就行了,1位對應5,2位對應6,…32位對應36。

位圖的實現(xiàn)

我們先把完整的實現(xiàn)代碼放在這里,后面會分析里面的具體實現(xiàn)。

public class BitMap {
    private final long[] bitMap;

    /**
     * 構(gòu)造函數(shù)
     *
     * @param max 位圖存儲著 [0,max]的元素
     */
    public BitMap(int max) {
        bitMap = new long[(max + 64) >> 6];
    }

    /**
     * 往位圖里面添加元素
     *
     * @param num 待添加的元素
     */
    public void add(int num) {
        bitMap[num >> 6] |= (1L << (num & 63));
    }

    /**
     * 刪除位圖里面的元素
     *
     * @param num 待刪除的元素
     */
    public void delete(int num) {
        bitMap[num >> 6] &= ~(1L << (num & 63));
    }

    /**
     * 觀察目標元素num在位圖中是存在
     *
     * @param num 目標元素
     * @return 存在返回1,否則返回0
     */
    public boolean contains(int num) {
        return (bitMap[num >> 6] & (1L << (num & 63))) != 0;
    }
}

構(gòu)造函數(shù)

代碼實現(xiàn):

    /**
     * 構(gòu)造函數(shù)
     *
     * @param max 位圖存儲著 [0,max]的元素
     */
    public BitMap(int max) {
        bitMap = new long[(max + 64) >> 6];
    }

分析:

在這里插入圖片描述

添加元素

代碼實現(xiàn):

    /**
     * 往位圖里面添加元素
     *
     * @param num 待添加的元素
     */
    public void add(int num) {
        bitMap[num >> 6] |= (1L << (num & 63));
    }

分析:

在這里插入圖片描述

刪除元素

代碼實現(xiàn):

    /**
     * 刪除位圖里面的元素
     *
     * @param num 待刪除的元素
     */
    public void delete(int num) {
        bitMap[num >> 6] &= ~(1L << (num & 63));
    }

分析:

刪除元素與添加元素類似,只是需要把該位置元素設置為0,而不是1。這里使用&元素去實現(xiàn)。

在這里插入圖片描述

判斷元素是否存在

代碼實現(xiàn):

    /**
     * 觀察目標元素num在位圖中是存在
     *
     * @param num 目標元素
     * @return 存在返回1,否則返回0
     */
    public boolean contains(int num) {
        return (bitMap[num >> 6] & (1L << (num & 63))) != 0;
    }

分析:

在這里插入圖片描述

到此這篇關(guān)于Java算法之位圖的概念和實現(xiàn)詳解的文章就介紹到這了,更多相關(guān)Java位圖的概念和實現(xiàn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java中List集合及其遍歷詳解

    java中List集合及其遍歷詳解

    這篇文章主要介紹了java中List集合及其遍歷詳解的相關(guān)資料,需要的朋友可以參考下
    2015-07-07
  • 淺談MyBatis所有的jdbcType類型

    淺談MyBatis所有的jdbcType類型

    在Mybatis中JdbcType類型是一個枚舉類型,它包含了所有的JDBC數(shù)據(jù)類型,如VARCHAR、INTEGER、DATE等,本文主要介紹了淺談MyBatis所有的jdbcType類型,具有一定的參考價值,感興趣的可以了解一下
    2023-06-06
  • 在SpringBoot環(huán)境中使用Mockito進行單元測試的示例詳解

    在SpringBoot環(huán)境中使用Mockito進行單元測試的示例詳解

    Mockito是一個流行的Java?mocking框架,它允許開發(fā)者以簡單直觀的方式創(chuàng)建和使用模擬對象(mocks),Mockito特別適用于在Spring?Boot環(huán)境中進行單元測試,所以本文介紹了在SpringBoot環(huán)境中使用Mockito進行單元測試的示例,需要的朋友可以參考下
    2024-11-11
  • 詳解SpringBoot中自定義和配置攔截器的方法

    詳解SpringBoot中自定義和配置攔截器的方法

    今天這篇文章來介紹一下攔截器在SpringBoot中的如何自定義及如何配置的,攔截器的具體作用和應用場景,感興趣的小伙伴可以了解一下
    2022-05-05
  • MyBatis執(zhí)行SQL的兩種方式小結(jié)

    MyBatis執(zhí)行SQL的兩種方式小結(jié)

    本文主要介紹了MyBatis執(zhí)行SQL的兩種方式小結(jié),主要包括SqlSession 發(fā)送SQL和SqlSession獲取Mapper接口,通過Mapper接口發(fā)送SQL,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • java微信支付功能實現(xiàn)源碼

    java微信支付功能實現(xiàn)源碼

    這篇文章主要給大家介紹了關(guān)于java微信支付功能實現(xiàn)源碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • 在SpringBoot中使用YourKit進行性能調(diào)優(yōu)的教程詳解

    在SpringBoot中使用YourKit進行性能調(diào)優(yōu)的教程詳解

    在應用程序的開發(fā)過程中,性能調(diào)優(yōu)是一個重要的環(huán)節(jié),在SpringBoot應用程序中,我們可以使用YourKit來進行性能調(diào)優(yōu),YourKit是一款非常強大的Java性能調(diào)優(yōu)工具,在本文中,我們將介紹如何在 SpringBoot應用程序中使用YourKit進行性能調(diào)優(yōu)
    2023-06-06
  • Spring?Data?JPA?映射VO/DTO對象方式

    Spring?Data?JPA?映射VO/DTO對象方式

    這篇文章主要介紹了Spring?Data?JPA?映射VO/DTO對象方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java中關(guān)于二叉樹的概念以及搜索二叉樹詳解

    Java中關(guān)于二叉樹的概念以及搜索二叉樹詳解

    二叉樹是一種很有用的非線性結(jié)構(gòu),日常的開發(fā)中常會用到,關(guān)于二叉樹的概念以及搜索二叉樹本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • SpringIOC?BeanDefinition的加載流程詳解

    SpringIOC?BeanDefinition的加載流程詳解

    這篇文章主要為大家介紹了SpringIOC?BeanDefinition的加載流程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10

最新評論

黎城县| 内黄县| 吴江市| 封开县| 曲阳县| 海兴县| 汤阴县| 项城市| 九江市| 邳州市| 绥滨县| 奈曼旗| 西贡区| 长寿区| 栾川县| 南涧| 大关县| 邹城市| 老河口市| 漳浦县| 化德县| 盐边县| 平南县| 永州市| 芦溪县| 新晃| 石首市| 峨边| 夏邑县| 宣威市| 文水县| 桃源县| 渭南市| 怀仁县| 休宁县| 马尔康县| 舒城县| 潮州市| 博乐市| 辰溪县| 定安县|