日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA的BIT数组

發布時間:2025/3/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

總結

以上是生活随笔為你收集整理的JAVA的BIT数组的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。