JAVA的BIT数组

写个小东西,要去重复数字,用到BIT数组,虽然JAVA已经提供了一个BitSet,不过自己手痒,又写了一个简单的

原理就不写了,网上一大堆

 1 import java.util.Iterator;
 2 import java.util.function.BiConsumer;
 3 
 4 public class BitArray implements Iterable<Boolean>{
 5     //表示1<<n的值,提高效率,不用每次计算
 6     private final byte[] MASK = new byte[]{1,2,4,8,16,32,64,(byte)128};
 7     byte[] bits;
 8     int max = 0;
 9     
10     /**
11      * 构造一个Bit数组
12      * @param max 最大位数
13      */
14     public BitArray(int max){
15         this.max = max;
16         int len = max / 8 + 1;
17         
18         bits = new byte[len];
19     }
20     
21     /**
22      * 设置第N位的值
23      * @param index Bit索引
24      * @param value 值
25      */
26     public void set(int index,boolean value){
27         int i = index / 8;
28         int move = index % 8;
29         
30         bits[i] = (byte)(bits[i] | MASK[move]);
31     }
32     
33     /**
34      * 取得第N位的值
35      * @param index Bit索引
36      * @return
37      */
38     public boolean get(int index){
39         int i = index / 8;
40         int move = index % 8;
41         
42         return (bits[i] & MASK[move]) == MASK[move];
43     }
44     
45     /**
46      * 显示所有位
47      */
48     public void show(){
49         for(int i=0; i<bits.length; i++){
50             byte b = bits[i];
51             for(int bitIndex=0; bitIndex<8;bitIndex++){
52                 System.out.print( ((b>>bitIndex) & 1) + " ");
53             }
54             System.out.println();
55         }
56     }
57 
58     /**
59      * 提供遍历接口
60      */
61     public Iterator<Boolean> iterator() {
62         return new Iterator<Boolean>(){
63             private int i = 0;
64 
65             public boolean hasNext() {
66                 return i <= max;
67             }
68 
69             public Boolean next() {
70                 return get(i++);
71             }
72             
73         };
74     }
75     
76     /**
77      * 遍历,偷懒用了JAVA8的新接口
78      * @param fun
79      */
80     public void forEach(BiConsumer<Integer,Boolean> fun){
81         int total = 0;
82         for(int i=0; i<bits.length; i++){
83             byte b = bits[i];
84             for(int bitIndex=0; bitIndex<8 && total<=max;bitIndex++,total++){
85                 fun.accept(total, ((b>>bitIndex) & 1) == 1);
86             }
87         }
88     }
89 }

 

 

使用方式:

public static void main( String[] args ) throws Exception
{BitArray bits = new BitArray(18);bits.set(18,true);System.out.println("position 3 : " + bits.get(3));System.out.println("position 18 : " + bits.get(18));System.out.println("--------------------------");//遍历方式 一int i = 0;for(Boolean result : bits)System.out.println(i++ + " : " + result);System.out.println("--------------------------");//遍历方式二BiConsumer<Integer,Boolean> fun = (index, value)->{System.out.println(index + " : " + value);};        bits.forEach(fun);
}

 

输出结果:

/*
position 3 : false
position 18 : true
--------------------------
0 : false
1 : false
2 : false
3 : false
4 : false
5 : false
6 : false
7 : false
8 : false
9 : false
10 : false
11 : false
12 : false
13 : false
14 : false
15 : false
16 : false
17 : false
18 : true
--------------------------
0 : false
1 : false
2 : false
3 : false
4 : false
5 : false
6 : false
7 : false
8 : false
9 : false
10 : false
11 : false
12 : false
13 : false
14 : false
15 : false
16 : false
17 : false
18 : true
*/

 

转载于:https://www.cnblogs.com/varlxj/p/5168157.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574049.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php环境苹果搭建,mac下搭建php环境

本文主要和大家分享mac下搭建php环境&#xff0c;最近工作环境切换到Mac&#xff0c;所以以OS X Yosemite(10.10.1)为例&#xff0c;记录一下从零开始安装Mac下LNMP环境的过程确保系统已经安装xcode&#xff0c;然后使用一行命令安装依赖管理工具Homebrew。ruby -e "$(cur…

php后门 佛像,35张活的再久,也未必见过的照片,图2是佛像通过CT扫描后内部照...

今天这组照片可能很多人都是一次见到&#xff0c;包括小编本人看了也十分惊讶。最大的感触是&#xff0c;很多的商品居然是这么做出来的&#xff0c;看完了才有一种豁然开朗的感觉&#xff0c;废话不多说一起看看吧。鸡蛋里面套鸡蛋1000年前佛像&#xff0c;经过CT扫描后&#…

oracle层次化查询

一般我们在处理层次关系的数据时&#xff0c;在建ER关系模型&#xff0c;我们都会产生自关联的数据结构。如&#xff1a;emp员工表中empno和managerno就是&#xff0c;这样就产生了层次化的结构。 那么如何快速的查询一个已知的根节点&#xff0c;查找到相应的一系列子节点呢&a…

民生付 php,“民生付”升级我省电商支付体验

■周昆 俞正林我省电子商务的发展正在得到更多的金融支持&#xff0c;未开通网银的消费者也能方便地进行网上支付了。记者近日从民生银行福州分行了解到&#xff0c;该行全网线上收单产品“民生付”已经得到我省电子商务企业的青睐。通过该服务&#xff0c;我省电子商务商户只需…

droidbox官网

droidbox官网&#xff0c;droidbox已经移植到github上了 https://github.com/pjlantz/droidbox 转载于:https://www.cnblogs.com/nightnine/p/5169261.html

java实现缓存中间件,Redis,分布式系统中不可少的缓存中间件

1.为什么要用缓存内存在整个计算机系统来说也就是一个缓存&#xff0c;CPU操作内存速度很快&#xff1b;因为操作数据的时候&#xff0c;先从硬盘中取出数据放到内存中&#xff0c;然后CPU操作数据缓存&#xff1a;提升访问效率&#xff0c;将一些频繁访问地放在缓存里面image.…

matlab自带的人脸分类器,基于MATLAB,运用PCA+SVM的特征脸方法人脸识别

概述&#xff1a;此文章将要描述一种基于MATLAB平台&#xff0c;运用PCA主成分分析方法对图片数据进行降维&#xff0c;运用SVM支持向量机分类器对降维后的图片数据进行分类处理&#xff0c;从而达到人脸识别的目的。首先要感谢以下几篇文章的作者(后面引用会标识文章标号)2.PC…

J2EE的13个规范之(二) JDBC 及其使用

我想大家都知道ODBC是什么&#xff1f;ODBC(OpenDatabaseConnectivity。开放数据库互连)是微软公司开放服务结构(WOSA&#xff0c;WindowsOpenServicesArchitecture)中有关数据库的一个组成部分。它建立了一组规范&#xff0c;并提供了一组对数据库訪问的标准API&#xff08;应…

被恶意上传了.php,轻松解决网站被恶意镜像

老听说有人的网站被恶意镜像&#xff0c;于是我先收藏几种解决方法。镜像站看似一个完整的站点&#xff0c;其实每次用户访问镜像站点&#xff0c;他的小偷程序就会来正版的网站查询数据&#xff0c;并修改相关链接然后呈献给用户。实质上还是在读取原站的数据&#xff0c;我们…

【代码笔记】iOS-对UIView进行截图

一&#xff0c;效果图。 二&#xff0c;工程图。 三&#xff0c;代码。 RootViewController.m #import "RootViewController.h"interface RootViewController ()endimplementation RootViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBund…

matlab实现浮点转定点,浮点转定点方法总结.doc

浮点转定点方法总结浮点转定点方法总结—孔德琦目录定点运算方法31.1 数 的 定 标31.2c语言&#xff1a;从浮点到定点41.2.1 加法41.2.2乘法61.2.3除法71.2.4 三角函数运算81.2.5 开方运算91.3 附录101.3.1 附录1&#xff1a;定点函数库101.3.2附录2&#xff1a;正弦和余弦表28…

caffe官网的部分翻译及NG的教程

Caffe原来叫&#xff1a;Convolutional Architecture for Fast Feature Embedding 官网的个人翻译&#xff1a;http://blog.csdn.net/fengbingchun/article/details/49535873 NG的英文教程&#xff1a;http://ufldl.stanford.edu/tutorial/supervised/MultiLayerNeuralNetworks…

matlab 中 t=0:t:(n-1)t;k=0:n-1,《MATLAB语言与应用》练习题答案

《MATLAB 语言与应用》实验课程任务书一、 实验教学目标与基本要求上机实验是本课程重要的实践教学环节&#xff1b;实验的目的不仅仅是验证理论知识&#xff0c;更重要的是通过上机实验&#xff0c;加强学生的实验手段与实践技能&#xff0c;掌握应用MATLAB 语言求解问题的方法…

Kerbose

http://blog.csdn.net/wulantian/article/details/42418231转载于:https://www.cnblogs.com/diyunpeng/p/5175290.html

IIS虚拟目录实现与文件服务器网络驱动器映射共享

这篇文章转载别人&#xff0c;想原创作者致敬&#xff01; 我本人也遇到同样的问题&#xff0c;故转载记录。 本文重点描述如何使用IIS访问共享资源来架设站点或执行 ASP.Net 等脚本。 通常情况下&#xff0c;拥有多台服务器的朋友在使用IIS建立站点的时候&#xff0c;会遇到如…

rsa php前台加密后台解密源码,使用RSA实现前端公钥加密后端私钥解密

项目中在用户登录时需要进行用户名和密码加密,这里选用了RSA非对称加密的方式.公钥私钥:OpenSSL的公钥私钥(Node crypto模块限制)前端: jsencrypt库加密后端: Node crypto模块使用openssl生成公钥私钥linux生成公钥私钥命令:genrsa -out rsa_private_key.pem 1024 // 生成1024位…

php 事件调度,MySQL的事件调度器使用介绍

自MySQL5.1.0起&#xff0c;增加了一个非常有特色的功能ndash;事件调度器(Event Scheduler)&#xff0c;可以用做定时执行某些特定任务&#xff0c;可以看作基于自MySQL5.1.0起&#xff0c;增加了一个非常有特色的功能–事件调度器(Event Scheduler)&#xff0c;可以用做定时执…

mysql中括号_干货!Python与MySQL数据库的交互实战

作者 | Huang supreme&#xff0c;责编 | 郭芮头图 | CSDN 下载自视觉中国安装PyMySQL库如果你想要使用python操作MySQL数据库&#xff0c;就必须先要安装pymysql库&#xff0c;这个库的安装很简单&#xff0c;直接使用pip install pymysql&#xff1b;假如这种方式还是安装不上…

Xcode清缓存

前往-->按住option键进入资源库-->Developer-->Xcode-->DerivedData 删除里面的文件就行了转载于:https://www.cnblogs.com/10-19-92/p/5181940.html

苹果天气不显示_热门天气APP被苹果拿下,安卓用户不能再使用

近日&#xff0c;Android平台最受欢迎的订阅式天气APP之一Dark Sky官方宣布其被苹果收购。收购后&#xff0c;Android和Wear OS上的Dark Sky APP都会在2020年7月1日下架&#xff0c;届时将关闭服务并提供退款&#xff0c;iOS版APP则不受影响。Dark Sky天气预报Dark Sky服务早就…