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

Java?BitMap源碼仿寫實(shí)現(xiàn)

 更新時(shí)間:2022年12月22日 14:16:14   作者:洋圏外の彼女  
這篇文章主要介紹了Java?BitMap源碼仿寫實(shí)現(xiàn),所謂bitmap,就是用每一位來存放某種狀態(tài),適用于大規(guī)模數(shù)據(jù),但數(shù)據(jù)狀態(tài)又不是很多的情況。通常是用來判斷某個(gè)數(shù)據(jù)存不存在的

bitmap的作用:

用來校驗(yàn)海量數(shù)字中某一個(gè)數(shù)字有沒有出現(xiàn)過,海量數(shù)據(jù)中某一個(gè)數(shù)據(jù)有沒有出現(xiàn)過

做一個(gè)長(zhǎng)的比特?cái)?shù)組,比特?cái)?shù)組就會(huì)出現(xiàn)索引(0n),所有0n之間的數(shù),比如123,就把所有比特?cái)?shù)組中索引為123的位置,由0變?yōu)?;看這個(gè)數(shù)有沒有出現(xiàn)在比特?cái)?shù)組中,看是0還是1;0沒有出現(xiàn)過,1出現(xiàn)過;

(getIndex()方法)byte數(shù)組中每一個(gè)都代表八位;做value>>3只是確定了0,1,2,3,4,5的位置,但是不知道在里邊的空里是多少;

getPosition()方法:決定了在后面1~8中的哪個(gè)位置

private int getPosition(int value){
   // return value%8;
    return value & 0x07;
}

byte[] bits = new byte[2];

比如說:添加13

13/8 = 1;確定了索引為1的一行的內(nèi)容

13>>3; 13的二進(jìn)制數(shù)是:1101 - - - > 0001

13%8 = 5;確定了是在此行的第五個(gè)位置

13 & 0x07

13 = 1101

0x07 = 0111

與操作= 0101

所以說13的位置 bits[13>>3] | 1<<(13&0x07)

1<<(13&0x07) = 1 << 5 = 0001 << = 00100000

假如說原來就是0 :00000000

或操作:00100000

package com.BitMap;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
public class MyBitMap {
    private byte[] bits;
    //byte數(shù)組中每一個(gè)數(shù)字都要代表八位
    public static final int DEFAULT_CAPACITY = 1<<10;//最大容量是1左移10位
    public MyBitMap(){
        this.bits = new byte[DEFAULT_CAPACITY];
        //System.out.println(bits.length);//輸出一下1左移10位的數(shù)字是多少
    }
    public static void main(String[] args) {
        MyBitMap map = new MyBitMap();
        Set<Integer> set = new HashSet<Integer>();
        Random random = new Random();
        for (int i = 0 ;i<800;i++){
            int i1 = random.nextInt(DEFAULT_CAPACITY);
            map.add(i1);
            set.add(i1);
        }
        for (int i = 100; i < 300; i++) {
            boolean contains = map.contains(i);
            if (contains){
                //用已知的set 來確定這個(gè)Map寫的沒問題
                if (set.contains(i)){
                    System.out.print(i + " is contains by set!!! ");
                }
                System.out.println(i + " is contains!!! ");
            }
            else {
                if (!set.contains(i)){
                    System.out.print((i + " is not contains by set !!!"));
                }
                System.out.println(i + " is not contains!");
            }
        }
    }
    public void add(int value){
        //找到value值在byte數(shù)組中的位置是在哪里
        int index = getIndex(value);
        //求余
        int position = getPosition(value);
        bits[index] |=1<<position;
    }
    public boolean contains(int value){
        int index = getIndex(value);
        int position = getPosition(value);
        return (bits[index] & 1<<position) != 0;
    }
    private int getPosition(int value){
       // return value%8;
        return value & 0x07;
    }
    //找到value值當(dāng)前所在數(shù)組中的位置
    private int getIndex(int value){
        // return value/8;
        return value>>3;
        //byte數(shù)組每個(gè)數(shù)字代表八位,除以8就可以得到數(shù)組里邊的位置
    }
}

到此這篇關(guān)于Java BitMap源碼仿寫實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java BitMap內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Resttemplate上傳文件500異常的原因及解決方法

    Resttemplate上傳文件500異常的原因及解決方法

    使用 Resttemplate 調(diào)用 DMS 文件服務(wù)器 Http 接口,出現(xiàn) 500 異常報(bào)錯(cuò),所以本文給大家介紹了Resttemplate上傳文件500異常的原因及解決方法,需要的朋友可以參考下
    2024-08-08
  • Springboot如何優(yōu)雅的關(guān)閉應(yīng)用

    Springboot如何優(yōu)雅的關(guān)閉應(yīng)用

    這篇文章主要介紹了Springboot如何優(yōu)雅的關(guān)閉應(yīng)用問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 新版idea創(chuàng)建spring boot項(xiàng)目的詳細(xì)教程

    新版idea創(chuàng)建spring boot項(xiàng)目的詳細(xì)教程

    這篇文章給大家介紹了新版idea創(chuàng)建spring boot項(xiàng)目的詳細(xì)教程,本教程對(duì)新手小白友好,若根據(jù)教程創(chuàng)建出現(xiàn)問題導(dǎo)致失敗可下載我提供的源碼,在文章最后,本教程較新,文中通過圖文給大家介紹的非常詳細(xì),感興趣的朋友可以參考下
    2024-01-01
  • MyBatis-Plus實(shí)現(xiàn)多表聯(lián)查的方法實(shí)戰(zhàn)

    MyBatis-Plus實(shí)現(xiàn)多表聯(lián)查的方法實(shí)戰(zhàn)

    這篇文章主要給大家介紹了關(guān)于MyBatis-Plus實(shí)現(xiàn)多表聯(lián)查的方法,MyBatis Plus是一款針對(duì)MyBatis框架的增強(qiáng)工具,它提供了很多方便的方法來實(shí)現(xiàn)多表聯(lián)查,需要的朋友可以參考下
    2023-07-07
  • java 中Executor, ExecutorService 和 Executors 間的不同

    java 中Executor, ExecutorService 和 Executors 間的不同

    這篇文章主要介紹了java 中Executor, ExecutorService 和 Executors 間的不同的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Java編程一維數(shù)組轉(zhuǎn)換成二維數(shù)組實(shí)例代碼

    Java編程一維數(shù)組轉(zhuǎn)換成二維數(shù)組實(shí)例代碼

    這篇文章主要介紹了Java編程一維數(shù)組轉(zhuǎn)換成二維數(shù)組,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • IDEA 2021.1 操作SVN 最新超詳細(xì)教程(圖文)

    IDEA 2021.1 操作SVN 最新超詳細(xì)教程(圖文)

    本教程將通過idea從svn服務(wù)器中的任意一個(gè)分支檢出代碼(本文采用branches),然后再idea中創(chuàng)建新的分支、提交代碼、拉取代碼、合并分支等操作進(jìn)行一一記錄,暫不包含代碼合并,對(duì)idea2021.1操作svn相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)下吧
    2021-05-05
  • Java實(shí)現(xiàn)網(wǎng)絡(luò)資源的單線程下載

    Java實(shí)現(xiàn)網(wǎng)絡(luò)資源的單線程下載

    這篇文章主要為大家詳細(xì)介紹了如何利用Java語(yǔ)言實(shí)現(xiàn)在一個(gè)線程中完成網(wǎng)絡(luò)資源的下載,文中的實(shí)現(xiàn)步驟講解詳細(xì),感興趣的可以嘗試下
    2022-10-10
  • Spring Boot使用FastJson解析JSON數(shù)據(jù)的方法

    Spring Boot使用FastJson解析JSON數(shù)據(jù)的方法

    本篇文章主要介紹了Spring Boot使用FastJson解析JSON數(shù)據(jù)的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • MyBatis如何實(shí)現(xiàn)多表查詢(多對(duì)一、一對(duì)多)

    MyBatis如何實(shí)現(xiàn)多表查詢(多對(duì)一、一對(duì)多)

    這篇文章主要給大家介紹了關(guān)于MyBatis如何實(shí)現(xiàn)多表查詢(多對(duì)一、一對(duì)多)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05

最新評(píng)論