位图数据结构

Posted 野生java研究僧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了位图数据结构相关的知识,希望对你有一定的参考价值。

位图数据结构

1.位图的概念

位图就是指由二进制位组成的数据结构。例如可以做标记处理。比如1个byte占用8个字节,那除去符号位,那么1个字节就可以表示8个状态位。

位图在算法中还是用的比较多,因为是基于二进制操作,运算速度比较快。比如在leetcode中的一道题目是 判定字符是否唯一,那么我们借助位图就可以进行如下判断

    public static boolean isUnique(String str) 
        long bits = 0;
        int size = str.length();
        for (int i = 0; i < size; i++) 
            int move = str.charAt(i) - 'A';
            if ((bits & (1L << move)) != 0) 
                //有重复的,直接返回false
                return false;
             else 
                //标记当前位置有这个字符
                bits |= (1L << move);
            
        
        return true;
    

2.位图常用操作

public class BitTest 
    public static void main(String[] args) 
        System.out.println(onOff(32,0));
    
    // 查询 第n个位置是否为1
    public static boolean contains(int x,int n)
        return (x &(1<<n))!=0;
    
    // 将第n位设置为1
    public static int  setBitOne(int x,int n)
        return x | (1<<n);
    
    // 将第n位设置为0
    public static int  setBiZero(int x,int n)
        return x &~ (1<<n);
    
    // 将这个数的从右往左数的所有位设置为1
    public static int setRightToLeftOne(int x)
        return x|(x-1);
    

    // 把number的二进制中从右往左数的最后一位0变成1
    public static int setRightToLeftZero(int x)
        return x|(x+1);
    
    // 对n位取反,n从0开始
    public static int onOff(int x,int n)
        return x^(1<<n);
    

以上是关于位图数据结构的主要内容,如果未能解决你的问题,请参考以下文章

七天玩转Redis | Day3 Redis地理位置基数统计位图场景使用详解

七天玩转Redis | Day3 Redis地理位置基数统计位图场景使用详解

七天玩转Redis | Day3 Redis地理位置基数统计位图场景使用详解

将位图保存到位置

Android PagerAdapter :: 将当前项目放入位图中

深入Redis位图