java实现bit-map算法存储大数据
2017-03-24 11:44
399 查看
import java.util.*; public class BitMap { private static final byte B=1; private static final byte KB=2; private static final byte MB=3; private static final byte GB=4; private static final byte [] bit=new byte[]{1,2,4,8,16,32,64,-128}; //{1,2,4,8,16,32,64,-128}; private int mAvailableSize; private static int mMemory; private static byte[] mArray; public BitMap() { mMemory=0; } public BitMap(int memory, int unit) { switch (unit) { case B: mMemory=memory; break; case KB: mMemory=memory*1024; break; case MB: mMemory=memory*1024*1024; break; case GB: mMemory=memory*1024*1024*1024; break; default: break; } mArray=new byte[mMemory]; mAvailableSize=mMemory*8; } public boolean add(int num){ if((num+8)/8>mMemory) return false; else{ mArray[num/8]|=bit[num%8]; mAvailableSize--; return true; } } //检查此元素是否存在 public boolean isInMap(int num) { if((num+8)/8>mMemory){ return false; } return( (mArray[num/8] & bit[num%8])!=0); } //返回能存储的数据个数 public int getMemory(){ return mAvailableSize; } //获取存取的数 public ArrayList<Integer> getElements() { ArrayList<Integer> list=new ArrayList<>(); for (int i = 0; i < mArray.length; i++) { for (int j = 0; j < bit.length; j++) { if((mArray[i] & bit[j])!=0) { int num=8*i+j; list.add(num); } } } return list; } public static void main(String[] args){ BitMap bm=new BitMap(20,1); System.out.println(bm.getMemory()); bm.add(0); bm.add(1); bm.add(2); bm.add(7); bm.add(42); bm.add(43); bm.add(57); bm.add(50); bm.add(55); bm.add(63); bm.add(10); bm.add(17); bm.add(20); bm.add(27); bm.add(30); System.out.println(bm.getMemory()); System.out.println(bm.isInMap(7)); ArrayList<Integer> listNum=bm.getElements(); for (int i = 0; i < listNum.size(); i++) { System.out.println(listNum.get(i)); } // String tString = Integer.toBinaryString((mArray[0] & 0xFF) + 0x100).substring(1); //int 数据转换为二进制 // System.out.println(tString); } }
相关文章推荐
- 数据算法之快速排序(quickSort)的Java实现
- 数据的压缩存储与解压缩算法实现(C语言)
- Java实现URI参数签名算法,确保应用与REST服务器之间的安全通信,防止Secret Key盗用、数据篡改等恶意攻击行为
- [置顶] 【JAVA】java中实现map集合的数据存取详解三种方法。Android程序员也是要会写的
- 数据挖掘-基于贝叶斯算法及KNN算法的newsgroup18828文档分类器的JAVA实现(上)
- 数据挖掘-基于Kmeans算法、MBSAS算法及DBSCAN算法的newsgroup18828文本聚类器的JAVA实现(下)
- java 数据存储 bit
- mahout demo——本质上是基于Hadoop的分步式算法实现,比如多节点的数据合并,数据排序,网路通信的效率,节点宕机重算,数据分步式存储
- 数据结构(四)---栈的顺序存储的实现---java版
- 数据挖掘-基于Kmeans算法、MBSAS算法及DBSCAN算法的newsgroup18828文本聚类器的JAVA实现(下)
- 数据挖掘-基于贝叶斯算法及KNN算法的newsgroup18828文本分类器的JAVA实现(下)
- 数据算法之折半查找(binSearch)的Java实现
- 数据算法之二叉树删除(BinaryTreeL Remove)的Java实现
- 行专列,拆分json,实现数据的展示。Map<String, Object>存储多个相同的key,List<Map<String, Object>>
- Java数据结构与算法---链表的实现
- 【数据结构与算法】链表1:单向链表(Java实现)
- 数据算法之插入排序(insertSort)的Java实现
- 数据算法之希尔排序(shellSort)的Java实现
- 算法与数据结构基础8:C++实现有向图——邻接表存储
- 数据挖掘-基于贝叶斯算法及KNN算法的newsgroup18828文本分类器的JAVA实现(上)