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. Linux 安装gcc4.8版本

    1.下载安装包 http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.8.1/ 2.解压 .tar.gz 3.下载编译所需的依赖包 cd ...

  2. [转]Java 8 Optional类深度解析(null处理)

    原文链接:http://www.importnew.com/6675.html 本文由 ImportNew - 高俊阳 翻译自 javacodegeeks.欢迎加入翻译小组.转载请见文末要求. 身为一 ...

  3. 利用html5canvas给图片增加文字水印

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  4. Java 实现Excel表数据的读取和写入 以及过程中可能遇到的问题

    问题1:Unable to recognize OLE stream 格式的问题要可能是因为给的数据是2010年的数据表后缀为.xlsx,要先转化成2003版的后缀为.xls 问题2: Warning ...

  5. Android仿ios底部弹出框效果

    准备: public class ActionSheet { public interface OnActionSheetSelected { void onClick(int whichButton ...

  6. mac下相关操作命令

    查看端口使用情况 lsof -i tcp:

  7. XPath基本使用

    一.简介 1.什么是XPath  1)XPath是W3C的一个标准 2)XPath 是一门在 XML 文档中查找信息的语言. 3)XPath 用于在 XML 文档中通过元素和属性进行导航. 4)XPa ...

  8. 洛谷 P1996 约瑟夫问题

    题目背景 约瑟夫是一个无聊的人!!! 题目描述 n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,……依次类推,直到所有的人都出 ...

  9. 系统相册中获取gif图片 保证取到的图片不会改变

    NSURL *imageRefURL = [info valueForKey:UIImagePickerControllerReferenceURL];                         ...

  10. adhoc无法下载应用程序 此时无法安装-解决

    解决方法 点击xcode,进入build setting,选择code signing,provisioning profile选择automatic 或者选择adhoc的provisioning p ...