java实现位图算法
来源:互联网 发布:数据治理体系框架 编辑:程序博客网 时间:2024/05/01 05:22
1、利用java自带的BitSet来
package lpc.Algorithm;
import java.util.BitSet;
public class BitMap {
public static void main(String[] args) {
// TODO Auto-generated method stub
int count = 100000000;
BitSet bit = new BitSet(count);
int i = 1000;
while(i>0){
bit.set((int)(Math.random()*count));
i--;
}
for (int index = 0; index < count; index++) {
if(bit.get(index)){
System.out.println(index+",");
}
}
System.out.println("end");
}
2、必行编写My_BitSet类
package lpc.Algorithm;
public class My_BitSet {
private int[] mBits;
public int[] getmBits() {
return mBits;
}
private int mSize;
/**
* 构造函数
* @param size 初始化mBits 的长度
*/
public My_BitSet(int size) {
// TODO Auto-generated constructor stub
mSize = size;
initBits();
}
//初始化整形数组
private void initBits() {
// TODO Auto-generated method stub
int count = (int) Math.ceil(mSize/32f)+1;
mBits =new int[count];
}
/**
* 将制定bit位置设置为1
* @param pos
*/
public void set(int pos){
//得到此pos在myits中的位置
//int index = (int)Math.floor(pos/32f);
int index = pos >> 5;
//把当前整数的地n位设置为1
//mBits[index] = mBits[index] | (1<<(pos%32));
mBits[index] = mBits[index] | (1<<(pos & 0x1F));
}
/**
* 获取指定位置是否存在
* @param pos
* @return
*/
public boolean get(int pos){
//int index = (int)Math.floor(pos/32f);
int index = pos >> 5;
//return mBits[index] == (mBits[index] | 1 <<(pos%32));
return mBits[index] == (mBits[index] | 1 <<(pos & 0x1F));
}
public void reset(int pos){
int index = (int)Math.floor(pos/32f);
//把当前整数的第n位设置为0
mBits[index] = mBits[index] & ~(1<<(pos%32));
}
/**
* 清空,全部置0
* @param args
*/
public void clear(){
int len = mBits.length;
for (int index = 0; index < len; index++) {
mBits[index] = 0 ;
}
}
public static void main(String[] args) {
//int[] a=new int[]{509,9,8,300,6,5,4,3,2,1,0};
int N=100000000;
int[] a=new int[N];
for (int i = 0; i < a.length; i++) {
a[i]=N-i-1;
}
int max=a[0];
for (int i : a) {
if (i>max) {
max=i;
}
}
long start = System.currentTimeMillis();
My_BitSet bitSet = new My_BitSet(max);
//设置值
for (int i : a) {
bitSet.set(i);
}
for (int i=0 ; i<=max; i++) {
if(bitSet.get(i)){};//防止刷屏只判断,什么也不做
}
long end = System.currentTimeMillis();
System.out.format("usetime: %d ms",(end-start));
/*
System.out.println("----------打印原数组----------");
for (int i : a) {
if(bitSet.get(i)){
System.out.println(i);
}
}
System.out.println("---------打印排序后数组-------------");
for (int i=0 ; i<=max; i++) {
if(bitSet.get(i)){
System.out.println(i);
}
}
*/
}
}
测试结果
0 0
- java实现位图算法
- 位图算法的实现
- java实现位图排序算法《编程珠玑》第一章笔记
- C#实现位图排序算法
- 位图bitmap算法(java)
- 位图bitmap算法(java)
- 转 java实现位图索引
- 位图排序算法(一),java版
- (转载)位图bitmap算法(java)
- 位图算法。
- 位图算法
- 位图算法
- 位图算法
- 位图算法
- 布尔运算--java位图搜索实现
- 用位图索引技术实现超大规模数据量的分组算法
- 【大数据】位图算法移位操作的实现
- 【大数据】位图算法移位操作的实现
- 网页中打开exe
- PAT乙级练习题B1027. 打印沙漏
- Spring框架入门(一)
- XUtils框架中HttpUtils使用Get请求时总是返回相同信息的问题解决
- 随机数
- java实现位图算法
- "break";"continue";"标签名+:"的运用
- 当设计一个APP UI的时候我们想什么?
- Double类parseDouble和valueOf方法的区别
- git教程
- HTML5的世界
- java实现简单的单点登录
- TTMS 一个基于Java Swing的Socket通信的剧院票务管理系统
- Retrofit+RxJava