java 位向量
public class BitVectory {
private int count;
private int[] a;
private static final int BIT_LEN = 32;
private static final int MASK = 0x1f; //16禁止表示 10进制31
private static final int SHIFT = 5; public BitVectory(int count) {
this.count = count;
init(count);
} private void init(int count) {
a = new int[(count - 1) / BIT_LEN + 1];
for (int i = 0; i < count; i++) {
clear(i);
}
} private void clear(int i) {
a[i >> SHIFT] &= ~ (1 << (i & MASK));
} //
public void set(int i) {
a[i >> SHIFT] |= (1 << (i & MASK));
} public List<Integer> getSortedArray() {
List<Integer> list = new ArrayList<>();
StringBuilder s = new StringBuilder();
for (int i = 0; i < count; i++) {
s.append(get(i));
if (get(i) == 1) {
list.add(i);
}
}
System.out.println(s.toString());
return list;
} private int get(int i) {
return Integer.bitCount(a[i >> SHIFT] & (1 << (i & MASK)));
} public static void main(String[] args) {
BitVectory bitVectory = new BitVectory(38); List<Integer> list = new ArrayList<>(38);
for (int i = 0; i < 38; i++) {
list.add((int) (Math.random() * 36));
} list.forEach(e -> {
bitVectory.set(e);
}); List<Integer> sortedArray = bitVectory.getSortedArray();
System.out.println(sortedArray.size() + "\t" + sortedArray);
System.out.println(Integer.toBinaryString(bitVectory.a[0]));
System.out.println(bitVectory.a.length);
System.out.println(Arrays.toString(bitVectory.a));
} }
利用位向量对 0-N的数据进行排序 N / mask + 1个数组a来表示这些数
java 位向量的更多相关文章
- Java位向量的实现原理与巧妙应用
Java位向量的巧实现原理与巧妙应用 1.博文介绍 本篇博文将会介绍几本的位运算含义.位向量介绍.BitSet实现原理.Java位向量的应用.拓展介绍Bloom Filter等. 2.位运算介绍 1) ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 一起学 Java(三) 集合框架、数据结构、泛型
一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...
- 【读书笔记】《编程珠玑》第一章之位向量&位图
此书的叙述模式是借由一个具体问题来引出的一系列算法,数据结构等等方面的技巧性策略.共分三篇,基础,性能,应用.每篇涵盖数章,章内案例都非常切实棘手,解说也生动有趣. 自个呢也是头一次接触编程技巧类的书 ...
- java中的大数BigInteger
compareTo比较大小 equals比较是否相等 ,不能用== while(cin.hasNext())//等价于!=EOF n=cin.nextBigInteger();//读入一个大整数 Sy ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- Java初识
基础概念 特点: 完全面向对象,动态 解释性,简单.易移植,跨平台 安全健壮,高性能 多线程,分布式 三种核心机制: Java虚拟机 Java Virtual Machine 垃圾收集机制 Garba ...
- 20145320 《Java程序设计》第2周学习总结
20145320 <Java程序设计>第2周学习总结 教材学习内容总结 3.1 类型.变量与运算符 基本类型 整数(short.int.long) .字节(byte) .浮点数(float ...
- Java集合容器简介
Java集合容器主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),Attr ...
随机推荐
- JMeter--PerfMon Metrics Collector监控内存及CPU
1.需要准备的软件及插件 ServerAgent-2.2.1.zip JMeterPlugins-Standard-1.3.1.zip 2.jmeter上JMeterPlugins-Standard- ...
- [问题记录]Ubuntu下chmsee安装失败的解决
日期:2016年2月26日 一直在找Ubuntu下查看chm的工具但是普遍不理想,发现在deepin中的chmsee相对比较好,但是直接执行网上的sudo apt-get install chmsee ...
- [BZOJ2982]combination Lucas定理
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2982 $C(N,M)\% P = C(N\% P,M\% P) * C(N/P,M/P)\ ...
- 判断后台service是否在运行
public static boolean isServiceRunning(Context mContext,String className) { boolean isRunning = fals ...
- idea npm 调试报错解决办法
1.用egg框架的开发时候,egg 提供本地开发和调试.点击idea 的debug 按钮时候报如下错误: Please specify npm or yarn package: cannot find ...
- C 函数库 (libc,glibc,uClibc,newlib)
glibc glibc和libc都是Linux下的C函数库,libc是Linux下的ANSI C的函数库:glibc是Linux下的GUN C的函数库:GNU C是一种ANSI C的扩展实现.ANSI ...
- 解决flexpaper读取本地文件问题,JAVA+TOMCAT
flexpaper是不可以用绝对路径的调用本地或项目外的swf文件的,这个我们就有两种方法,一种是把swf和项目放在同一个目录下面,通过相对路径来获取 另一种是在运行项目的tomcat的server. ...
- JAVA的程序基本结构和数据类型
//源程序 Hello.java public class Hello { static String str ="Hello World"; public static void ...
- 刷新本地DNS缓存的方法
http://www.cnblogs.com/rubylouvre/archive/2012/08/31/2665859.html 常有人问到域名解析了不是即时生效的嘛,怎么还是原来的呢?答案就是在本 ...
- WebStorm 配置less
1.打开Webstorm的Setting 搜索,watch 找到 File watch,点击右侧加号添加Less. 2.配置, working directory. Output paths