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 ...
随机推荐
- Visual Studio 2015将在7月20号RTM
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:用了3个多月的VS 2015终于要迎来RTM了,不过感觉有点淡淡的忧伤(为什么呢?请看 ...
- vim实现全选功能
转自:http://blog.csdn.net/csh159/article/details/7533872 曾经也在找看看有没有快捷的方法全选,但是网上很多都是重复,并且错误的,比如: 1,$y,这 ...
- leetcode1237
date: 2015-09-09 20:20:58 Two Sum Given an array of integers, find two numbers such that they add up ...
- 在SharePoint2010中用out-of-box的方式自定制Application Pages(AccessDenied,Confirmation,Error,Login,RequestAccess,Signout,WebDeleted)
在实际项目中需要对SharePoint2010中的AccessDenied页面进行自定制,于是乎上网搜索相关内容,经实际操作此方法可行,便以此文记录. 在SharePoint2010中,由于secur ...
- 内核函数KiFastCallEntry
KiFastCallEntry() 机制分析 概述 Win32 子系统 API 调用 ntdll!ZwWriteFile() 函数 ntdll!KiFastSystemCall() 函数 _KUSER ...
- Build an ETL Pipeline With Kafka Connect via JDBC Connectors
This article is an in-depth tutorial for using Kafka to move data from PostgreSQL to Hadoop HDFS via ...
- .htaccess是什么?.htaccess几个简单应用
.htaccess是什么? .htaccess叫分布式配置文件,它提供了针对目录改变配置的方法——在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录.并且子目录中的 ...
- SQL Case when 的使用方法(转)
Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...
- RabbitMQ常用命令
创建一个用户为mytest,密码为mytest rabbitmqctl add_user mytest mytest 删除一个用户 rabbitmqctl delete_user username ...
- BootSrap学习
1.当row1里边有2个或多个col的时候,如果位置在后边的col的高度大于位置在前边的col,就可能会导致下一个row2在满足col-xs-*在满足和为12的情况下错乱分行.解决办法是强行给row1 ...