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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java获取10位随机数_Java基础:JAVA中BitSet使用详解

發布時間:2023/12/2 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java获取10位随机数_Java基础:JAVA中BitSet使用详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

適用場景:整數,無重復;

Bitset 基礎

Bitset,也就是位圖,由于可以用非常緊湊的格式來表示給定范圍的連續數據而經常出現在各種算法設計中。上面的圖來自c++庫中bitset的一張圖。

基本原理是,用1位來表示一個數據是否出現過,0為沒有出現過,1表示出現過。使用用的時候既可根據某一個是否為0表示此數是否出現過。

一個1G的空間,有 8102410241024=8.5810^9bit,也就是可以表示85億個不同的數。

常見的應用是那些需要對海量數據進行一些統計工作的時候,比如日志分析等。

面試題中也常出現,比如:統計40億個數據中沒有出現的數據,將40億個不同數據進行排序等。

又如:現在有1千萬個隨機數,隨機數的范圍在1到1億之間。現在要求寫出一種算法,將1到1億之間沒有在隨機數中的數求出來(百度)。

programming pearls上也有一個關于使用bitset來查找電話號碼的題目。

Bitmap的常見擴展,是用2位或者更多為來表示此數字的更多信息,比如出現了多少次等。

Java中Bitset的實現

Bitset這種結構雖然簡單,實現的時候也有一些細節需要主要。其中的關鍵是一些位操作,比如如何將指定位進行反轉、設置、查詢指定位的狀態(0或者1)等。 本文,分析一下java中bitset的實現,拋磚引玉,希望給那些需要自己設計位圖結構的需要的程序員有所啟發。

Bitmap的基本操作有:

  • 初始化一個bitset,指定大小。
  • 清空bitset。
  • 反轉某一指定位。
  • 設置某一指定位。
  • 獲取某一位的狀態。
  • 當前bitset的bit總位數。

使用場景

常見的應用是那些需要對海量數據進行一些統計工作的時候,比如日志分析、用戶數統計等等

如統計40億個數據中沒有出現的數據,將40億個不同數據進行排序等。

現在有1千萬個隨機數,隨機數的范圍在1到1億之間。現在要求寫出一種算法,將1到1億之間沒有在隨機數中的數求出來

代碼示例

package util; import java.util.Arrays;import java.util.BitSet; public class BitSetDemo { /** * 求一個字符串包含的char * */public static void containChars(String str) {BitSet used = new BitSet();for (int i = 0; i < str.length(); i++)used.set(str.charAt(i)); // set bit for char StringBuilder sb = new StringBuilder();sb.append("[");int size = used.size();System.out.println(size);for (int i = 0; i < size; i++) {if (used.get(i)) {sb.append((char) i);}}sb.append("]");System.out.println(sb.toString());} /** * 求素數 有無限個。一個大于1的自然數,如果除了1和它本身外,不能被其他自然數整除(除0以外)的數稱之為素數(質數) 否則稱為合數 */public static void computePrime() {BitSet sieve = new BitSet(1024);int size = sieve.size();for (int i = 2; i < size; i++)sieve.set(i);int finalBit = (int) Math.sqrt(sieve.size()); for (int i = 2; i < finalBit; i++)if (sieve.get(i))for (int j = 2 * i; j < size; j += i)sieve.clear(j); int counter = 0;for (int i = 1; i < size; i++) {if (sieve.get(i)) {System.out.printf("%5d

總結

以上是生活随笔為你收集整理的java获取10位随机数_Java基础:JAVA中BitSet使用详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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