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));
            }
        }
    }

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

  • 相关阅读:
    逆袭之旅DAY31.XIA.JDBC
    逆袭之旅DAY30.XIA.集合
    亮晶晶幼儿园家校沟通平台的设计与实现
    逆袭之旅DAY28.XIA.异常处理
    LY.JAVA.DAY12.String类
    2018年7月23日-星期二
    LY.JAVA.DAY12.Scanner
    DAY27.XIA.面向對象
    职业生涯规划
    如何找到自己喜欢的职业
  • 原文地址:https://www.cnblogs.com/g177w/p/14731596.html
Copyright © 2011-2022 走看看