java实现BitMap
package bitmap;
public class BitMap {
private byte[] bytes;
public BitMap(byte[] bytes) {
super();
this.bytes = bytes;
}
public BitMap() {
super();
}
public BitMap(int size) {
super();
int number = size / 8 + 1;// may waste a byte, which does not matter
bytes = new byte[number];
}
/**
*
* @param n
* n>=1
*/
public void setBit(int n) {
if (n <= 0)
return;
int index = -1;
int offset = -1;
if (0 == n % 8) {
index = n / 8 - 1;
offset = 7;
} else {
index = n / 8;
offset = n % 8 - 1;
}
switch (offset) {
case 0:
bytes[index] = (byte)(bytes[index]|0x01);
break;
case 1:
bytes[index] = (byte)(bytes[index]|0x02);
break;
case 2:
bytes[index] = (byte)(bytes[index]|0x04);
break;
case 3:
bytes[index] = (byte)(bytes[index]|0x08);
break;
case 4:
bytes[index] = (byte)(bytes[index]|0x10);
break;
case 5:
bytes[index] = (byte)(bytes[index]|0x20);
break;
case 6:
bytes[index] = (byte)(bytes[index]|0x40);
break;
case 7:
bytes[index] = (byte)(bytes[index]|0x80);
break;
}
}
public boolean get(int n){
if (n <= 0)
return false;
int index = -1;
int offset = -1;
if (0 == n % 8) {
index = n / 8 - 1;
offset = 7;
} else {
index = n / 8;
offset = n % 8 - 1;
}
switch (offset) {
case 0:
return (byte)(bytes[index]&0x01)!=0;//2^0
case 1:
return (byte)(bytes[index]&0x02)!=0;
case 2:
return (byte)(bytes[index]&0x04)!=0;
case 3:
return (byte)(bytes[index]&0x08)!=0;
case 4:
return (byte)(bytes[index]&0x10)!=0;
case 5:
return (byte)(bytes[index]&0x20)!=0;
case 6:
return (byte)(bytes[index]&0x40)!=0;
case 7:
return (byte)(bytes[index]&0x80)!=0;
}
return false;
}
public static void main(String[] args) {
BitMap bMap = new BitMap(60);
bMap.setBit(59);
bMap.setBit(20);
bMap.setBit(21);
for(int i=1;i<=60;i++){
if(bMap.get(i)==true)
System.out.println(i);
}
}
}
java实现BitMap的更多相关文章
- Java的bitmap到C
在很多情况下android程序员需用到c,bimap这个是一个java中的类,android底层有一个skbitmap类和其对应.先在我遇到了需要把java的bitmap传递到底层中进行一些操作.现在 ...
- java使用bitmap求两个数组的交集
一般来说int代表一个数字,但是如果利用每一个位 ,则可以表示32个数字 ,在数据量极大的情况下可以显著的减轻内存的负担.我们就以int为例构造一个bitmap,并使用其来解决一个简单的问题:求两个数 ...
- 【算法与数据结构专场】BitMap算法基本操作代码实现
上篇我们讲了BitMap是如何对数据进行存储的,没看过的可以看一下[算法与数据结构专场]BitMap算法介绍 这篇我们来讲一下BitMap这个数据结构的代码实现. 回顾下数据的存储原理 一个二进制位对 ...
- Android笔记--Bitmap
Android | Bitmap解析 Android中Bitmap是对图像的一种抽象.通过他可以对相应的图像进行剪裁,旋转,压缩,缩放等操作.这里循序渐进的一步步了解Bitmap的相关内容. 先了解B ...
- Android图像处理之BitMap(2)
Bitmap 相关 1. Bitmap比较特别 因为其不可创建 而只能借助于BitmapFactory 而根据图像来源又可分以下几种情况: * png图片 如:R.drawable.tianjin J ...
- Android Bitmap变迁与原理解析(4.x-8.x)
App开发不可避免的要和图片打交道,由于其占用内存非常大,管理不当很容易导致内存不足,最后OOM,图片的背后其实是Bitmap,它是Android中最能吃内存的对象之一,也是很多OOM的元凶,不过,在 ...
- 图片系列(6)不同版本上 Bitmap 内存分配与回收原理对比
请点赞关注,你的支持对我意义重大. Hi,我是小彭.本文已收录到 GitHub · AndroidFamily 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭锐] ...
- Android之三种网络请求解析数据(最佳案例)
AsyncTask解析数据 AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用. AsyncTask是个抽象类,使用时需要继承这个类,然后调用execute()方法. ...
- Android 保存图片到SQLite
[转:原文] Resources res = getResources(); Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.ico ...
随机推荐
- 提供给Android和iOS开发人员的UWP移植向导
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:前几天微软发布了一个针对Android和iOS开发人员理解Windows Apps概念 ...
- apt-get常见错误——Unmet dependencies
转自:http://blog.sina.com.cn/s/blog_4980828b0100zicn.html 安装错误:“E: Unmet dependencies.”原因:非正常停止apt-get ...
- PMP 第五章 项目范围管理
1.范围管理主要是干什么?什么是产品范围?什么是项目范围? 项目范围管理包括确保项目做而且只做成功完成项目所需的全部工作的各过程.管理项目范围主要是在定义和控制哪些工作应该包括在项目内,哪些不应 ...
- Shell脚本获取C语言可执行程序返回值
#!/bin/sh #./test是c程序,该程序 返回0 ./test OP_MODE=$? echo $OP_MODE # $? 显示最后命令的退出状态.0表示没有错误,其他任何值表明有错误.
- hihoCoder 1391 Countries【预处理+排序+优先队列】2016北京网络赛
题目:http://hihocoder.com/problemset/problem/1391 题目大意: A和B两个国家互射导弹,每个国家都有一个防御系统,在防御系统开启的时间内可以将到达本国的导弹 ...
- 在Xcode中想要清屏该怎么实现
XCODE的控制台不会有清屏效果,并没有像终端一样可以clear.但在某些时候我们非得想要清屏该怎么办呢??你去打开可执行文件,就会有类似清屏的效果.实际上是它帮你自动换页了,xcode左边是可以看到 ...
- 一定要学会paxos算法!
paxos算法 http://blog.csdn.net/dellme99/article/details/14162159
- LoadRunner 脚本学习 -- 随机函数运用
直接上码 Action() { int randnum; randnum = rand()%+; lr_output_message("随机得到的数是:%d", randnum); ...
- loadrunner通过C语言实现字符的替换(只能替换单个字符,慎用)
如果按照普通的定义字符串就会出现以下错误: 解决方法如下: 将双引号改成单引号: lr_searchReplace(abc,"test",' ','+'); Action也可以这些 ...
- JavaScript权威指南读书笔记
JavaScript 1.变量 变量是一个表示值的符号,是一个名字,他的本质是值: var x; //----声明一个变量: 值通过等号“=”赋给变量,x = 16; 对象是名/值对的集合,或字符串到 ...