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 位向量的更多相关文章

  1. Java位向量的实现原理与巧妙应用

    Java位向量的巧实现原理与巧妙应用 1.博文介绍 本篇博文将会介绍几本的位运算含义.位向量介绍.BitSet实现原理.Java位向量的应用.拓展介绍Bloom Filter等. 2.位运算介绍 1) ...

  2. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  3. 一起学 Java(三) 集合框架、数据结构、泛型

    一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...

  4. 【读书笔记】《编程珠玑》第一章之位向量&位图

    此书的叙述模式是借由一个具体问题来引出的一系列算法,数据结构等等方面的技巧性策略.共分三篇,基础,性能,应用.每篇涵盖数章,章内案例都非常切实棘手,解说也生动有趣. 自个呢也是头一次接触编程技巧类的书 ...

  5. java中的大数BigInteger

    compareTo比较大小 equals比较是否相等 ,不能用== while(cin.hasNext())//等价于!=EOF n=cin.nextBigInteger();//读入一个大整数 Sy ...

  6. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  7. Java初识

    基础概念 特点: 完全面向对象,动态 解释性,简单.易移植,跨平台 安全健壮,高性能 多线程,分布式 三种核心机制: Java虚拟机 Java Virtual Machine 垃圾收集机制 Garba ...

  8. 20145320 《Java程序设计》第2周学习总结

    20145320 <Java程序设计>第2周学习总结 教材学习内容总结 3.1 类型.变量与运算符 基本类型 整数(short.int.long) .字节(byte) .浮点数(float ...

  9. Java集合容器简介

    Java集合容器主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),Attr ...

随机推荐

  1. codevs 1262 不要把球传我 2012年CCC加拿大高中生信息学奥赛

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver 题目描述 Description CCC的足球比赛和传统的足球比赛有一点不同, 一次进球当且仅当先后接触到球的 ...

  2. docker配置国内镜像

    1. 配置 root@ros-OptiPlex-3050:~# cat /etc/docker/daemon.json {    "graph": "/mnt/docke ...

  3. UVA 1151 Buy or Build (最小生成树)

    先求出原图的最小生成树,然后枚举买哪些套餐,把一个套餐内的点相互之间边权为0,直接用并查集缩点.正确性是基于一个贪心, 在做Kruskal算法是,对于没有进入最小生成树的边,排序在它前面的边不会减少. ...

  4. 图像处理框架 Core Image 介绍

    这篇文章会为初学者介绍一下 Core Image,一个 OS X 和 iOS 的图像处理框架. 如果你想跟着本文中的代码学习,你可以在 GitHub 上下载示例工程.示例工程是一个 iOS 应用程序, ...

  5. 几个不错的APP网站。

    http://www.yunshipei.com/yunshipei.html http://www.appcan.cn/

  6. vc生产垃圾清理

    @echo off echo 清除所有obj pch idb pdb ncb opt plg res sbr ilk suo文件,请稍等...... pause del /f /s /q .\*.ob ...

  7. |chromosomal walk |zoo blot|鉴定疾病gene|

    5.6基于外显子的保守性鉴定真核生物编码蛋白质的基因 鉴定功能性基因的流程是:1.连锁分析找到该基因的染色体的特定区域:2.在这段序列中选择一条短序列,寻找满足两个条件的基因(条件一:因为功能性基因是 ...

  8. 浅谈js的sort()方法

    如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码(字符串Unicode码点)的顺序进行排序.要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以 ...

  9. redhat7.3建两个网桥导致mac地址不一致解决办法

    将网卡配置文件中加入下面一行参数 NM_CONTROLLED=no

  10. iOS开发--使用OpenSSL生成私钥和公钥的方法

    最近要在新项目中使用支付宝钱包进行支付,所以要调研对接支付宝的接口,支付宝开放平台采用了RSA安全签名机制,开发者可以通过支付宝   公钥验证消息来源,同时可使用自己的私钥对信息进行加密,所以需要在本 ...