zoukankan      html  css  js  c++  java
  • 数据结构与算法之hash,bitmap简单实现

    1.hash算法就是将目标值存储前进行打散,然后将其存储到数组中,打散的操作就是hash函数,常见的就是取模,对上限取模操作后找到其下标,然后将之存储,典型代表是jdk hashmap(hash函数非简单的取模操作),hash存在的意义就是充分利用数组随机访问的特性,将取值操作的过程时间复杂度尽可能优化到O(1)。

    2.bitmap,核心思想是充分利用到计算机的最小存储单元bit,在内部创建一个byte数组,每个数组下标对于的值都可以表示8位,以此实现存储上的压缩

    2.1BitMap.java

    package com.hfm.util;
    
    import java.util.Arrays;
    
    public class BitMap {
        byte data[];
    
        int len;
        public BitMap(int cap) {
            this.len = (cap>>3)+1;
            this.data = new byte[this.len];
        }
    
        public void add(int item){
            int index = (item>>3), loc = item%8;
            data[index] |= 1<<loc;
        }
    
        public void remove(int item){
            int index = (item>>3), loc = item%8;
            data[index] ^= 1<<loc;
        }
    
        public boolean isPresent(int item){
            int index = (item>>3), loc = item % 8, num = 1 << loc;
            return (num & data[index]) == num ;
        }
    
        public static void main(String[] args) {
            BitMap map = new BitMap(100);
            map.add(1);
            map.add(11);
            map.add(19);
            map.add(89);
    
    
            for (int i = 0; i < 101; i++) {
                System.out.println(i+":"+map.isPresent(i));
            }
            System.out.println("-------------------------");
            map.remove(19);
            for (int i = 0; i < 101; i++) {
                System.out.println(i+":"+map.isPresent(i));
            }
        }
    }

    说明:以上代码只是简单的操作,没有考虑数值越界后的扩容问题及并发问题,只是提供一个思路。

  • 相关阅读:
    下一座“金矿”:移动医疗的契机和风险
    android ViewStub简单介绍
    IT人员必须掌握的10项软技能
    Android ListView item 点击事件失效问题的解决
    前端之Android入门(3):MVC模式(上)
    Android 错误提示: Can't create handler inside thread that has not called Looper.prepare()
    Android 性能优化提示
    Android 学习资源
    元素水平对齐
    div垂直居中
  • 原文地址:https://www.cnblogs.com/g177w/p/14731596.html
Copyright © 2011-2022 走看看