set 采用十六位整数存储数值的java实现
来源:互联网 发布:银行数据录入员好做吗 编辑:程序博客网 时间:2024/05/20 23:04
/* * 每个整型值 按照二进制算 有16 位 两个字节 * * int[0] 就可以表示 0 -15 15则最后一位置1 例如8 就可以表示位 10000000 第九位 置1 * int[1] 就可以表示 16-31 * int[2] 就可以表示 32-47 *确定了最大的整数就可以确定存储的数组的大小了 * */public class Set { private int setrange; private int arraysize; public int member[]; public Set( int setrange) { this.setrange = setrange; arraysize = (setrange+15)>>4;//确定存储数组的大小 member = new int[arraysize];//初始化存储数组位0 for(int i = 0; i < arraysize; i++) { member[i] = 0; } } int arrayIndex(int item) { return item >> 4 ; //一个整数存储 16个数字 除以16 确定 这个整数 位于member 的下标值 } int bitMask(int item) { // print("bitMask:"+( 1 << (item&15))); //item&15 求与运算 求的 item 在0-15的哪个位置 例如33 求得值为1 //1<<n 将第几位置1 return 1 << (item&15); } public void insert(int item) { if(item < 0 && item >= setrange) { System.out.println("out of range"); return; } //插入一个值 先取出 member[index] 中的值 与置1的位求并集 //print("member["+arrayIndex(item)+"]"); member[arrayIndex(item)] |= bitMask(item); } public void delete(int item) { if(item < 0 || item >= setrange) { System.out.println("out of range"); return; } //删除一个数 先将这个数的二进制位置0 然后求交集 member[arrayIndex(item)]&=~bitMask(item); } //判断一个数是否存在 取出这个数置1 的二进制位的数 然后与 member[index]求交集 public int isMember(int item) { if(item < 0 || item >= setrange) { System.out.println("out of range"); return -1; } return member[arrayIndex(item)]&bitMask(item); } public List<Integer> getList() { List<Integer> list = new ArrayList(); for(int i = 0; i < arraysize;i++) { if(member[i] !=0) {//如果member[i]不是0 说明里面存取了数值 for(int k=0; k <= 15; k++) { //判断 0-15位是否 位1 如果是1 说明有值 int orValue = member[i]&(1<<k); // System.out.print("orValue:"+orValue+" "); if(orValue != 0) { list.add(16*i+k); } } } } return list; } //打印这个范围的数 所有存储进集合的数 public void printSets() { for(int i = 0; i < setrange; i++) { int index = (i )>> 4;//查找位于第几个数组 // int memberflag = member[arrayIndex(index)]&bitMask(i); if(isMember(i)!= 0) { print(i+","); } } } private void print(String str) { System.out.println(str); }}
阅读全文
0 0
- set 采用十六位整数存储数值的java实现
- 数值的整数次方Java实现
- JAVA实现数值的整数次方(《剑指offern》)
- JAVA实现数值的整数次方(《剑指offer》)
- 06 实现数值的整数次方
- 数值的整数次方代码实现
- 【剑指offer】数值的整数次方-Java
- 数值的整数次方(java版)
- 剑指offer面试题11 数值的整数次方的Java代码实现
- 剑指offer--面试题11:数值的整数次方--Java实现
- 剑指Offer:面试题11——数值的整数次方(java实现)
- 剑指Offer面试题11:数值的整数次方 Java实现
- 剑指offer面试题11 数值的整数次方 java实现
- 《剑指offer2》问题16 数值的整数次乘方 Java实现
- 剑指Offer 面试题16:数值的整数次方 Java代码实现
- 数值的整数次方
- 数值的整数次方
- 数值的整数次方
- jQuery插件支持AMD的写法改造
- springmvc dispatcherServlet url-pattern的设置
- ROS control-----hardware_interface简介
- 大学最难的课是哪一门课?
- 我用Python来爬取了小说《花千骨》……
- set 采用十六位整数存储数值的java实现
- Java泛型
- 2017年全球前十大IC封测代工营收排名
- 软件测试学习资料网站
- VS调试问题之“...\.exe不是内部或外部命令,也不是可运行程序或批处理文件“
- 熊猫学猿--第四竹(变量)
- 怎么改变自己,拥有一个从容的生存状态?
- 如何在centos 6.5 下利用docker里部署elasticsearch
- BZOJ1084 [SCOI2005]最大子矩阵