javabitset
1. java 假如String"01010" 我要怎樣把它轉成bitset
publicBitSettoBitSet(Strings){
intlen=s.length();
BitSetbs=newBitSet(len);
for(inti=0;i<len;i++){
if(s.charAt(i)=='1')
bs.set(i);
}
returnbs;
}
publicStringtoString(BitSetbs){
intlen=bs.length();
StringBufferbuf=newStringBuffer(len);
for(inti=0;i<len;i++)
buf.append(bs.get(i)?'1':'0');
returnbuf.toString();
}
2. 如何用java隨機生成一個字母
java產生隨機數和隨機字母,使用madom類,示例如下:
String
new
String();s=String.valueOf(
int
n);
package com.qiu.lin.he;
public class CeShi {
public static void main(String[] args) {
int str1 = 0;
for (int i = 0; i < 25; i++) {// 你想生成幾個字元的,就把4改成幾,如果改成1,那就生成一個隨機字母
for (int i = 0; i < 25; i++) {// 你想生成幾個字元的,就把4改成幾,如果改成1,那就生成一個隨機字母
str = str + (char) (Math.random() * 26 + 'A');
System.out.println("輸出隨機生成的字元串" + str);
JDK1.0
Java的實用工具類庫java.util包。在這個包中,Java提供了一些實用的方法和數據結構。例如,Java提供日期(Data)類、日歷(Calendar)類來產生和獲取日期及時間,提供隨機數(Random)類產生各種類型的隨機數,還提供了堆棧(Stack)、向量(Vector) 、位集合(Bitset)以及哈希表(Hashtable)等類來表示相應的數據結構。
以上內容參考:網路-java.util
3. JAVA數據結構有哪幾種
JAVA數據結構有以下幾種:
1、List:
List是有序的Collection,使用此介面能夠精確的控制每個元素插入的位置。用戶能夠使用索引(元素在List中的位置,類似於數組下 >標)來訪問List中的元素,這類似於Java的數組。
2、Vector:
基於數組(Array)的List,其實就是封裝了數組所不具備的一些功能方便我們使用,所以它難易避免數組的限制,同時性能也不可能超越數組。
另外很重要的一點就是Vector是線程同步的(sychronized)的,這也是Vector和ArrayList 的一個的重要區別。
3、ArrayList:
同Vector一樣是一個基於數組上的鏈表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector好一些,但是當運行到多線程環境中時,可需要自己在管理線程的同步問題。
4、LinkedList:
LinkedList不同於前面兩種List,它不是基於數組的,所以不受數組性能的限制。 它每一個節點(Node)都包含兩方面的內容:節點本身的數據(data),下一個節點的信息(nextNode)。
所以當對LinkedList做添加,刪除動作的時候就不用像基於數組的ArrayList一樣,必須進行大量的數據移動。只要更改nextNode的相關信息就可以實現了,這是LinkedList的優勢。
5、HashSet:
雖然Set同List都實現了Collection介面,但是他們的實現方式卻大不一樣。List基本上都是以Array為基礎。
但是Set則是在 HashMap的基礎上來實現的,這就是Set和List的根本區別。HashSet的存儲方式是把HashMap中的Key作為Set的對應存儲項。
6、HashMap:
基於哈希表的 Map 介面的實現。此實現提供所有可選的映射操作,並允許使用 null 值和 null 鍵。(除了不同步和允許使用 null 之外,HashMap 類與 Hashtable 大致相同。)此類不保證映射的順序,特別是它不保證該順序恆久不變。
7、HashTable:
Hashtable 是一個散列表,它存儲的內容是鍵值對(key-value)映射。Hashtable 繼承於Dictionary,實現了Map、Cloneable、java.io.Serializable介面。
Hashtable 的函數都是同步的,這意味著它是線程安全的。它的key、value都不可以為nul
4. 為什麼Java中的BitSet使用long數組做內部存儲,而不使用int數組...
JDK選擇long數組作為BitSet的內部存儲結構是出於性能的考慮,因為BitSet提供and和or這種操作,需要對兩個BitSet中的所有bit位做and或者or,實現的時候需要遍歷所有的數組元素。使用long能夠使得循環的次數降到最低,所以Java選擇使用long數組作為BitSet的內部存儲結構。
從數據在棧上的存儲來說,使用long和byte基本是沒有什麼差別的,除了編譯器強制地址對齊的時候,使用byte最多會浪費7個位元組(強制按照8的倍數做地址對其),另外從內存讀數組元素的時候,也是沒有什麼區別的,因為匯編指令有對不同長度數據的mov指令。所以說,JDK選擇使用long數組作為BitSet的內部存儲結構的根本原因就是在and和or的時候減少循環次數,提高性能。
作者:馬天笑
鏈接:http://www.hu.com/question/21061816/answer/17047941
來源:知乎
當對單個bit進行操作時,兩種存儲方式不會有太大的區別:首先計算bit所在的word,然後對word中對應的bit進行操作。當同時對多個bit進行操作時,long數組存儲方式可以帶來較大的新能提升。例如我們進行BitSet中的and, or, xor操作時,要對整個bitset中的bit都進行操作,需要依次讀出bitset中所有的word,如果是long數組存儲,我們可以每次讀入64個bit,而int數組存儲時,只能每次讀入32個bit。另外我們在查找bitset中下一個置為1的bit時,word首先會和0進行比較,如果word的值為0,則表示該word中沒有為1的bit,可以忽略這個word,如果是long數組存儲,可以一次跳過64個bit,如果是int數組存儲時,一次只能跳過32個bit。
作者:王強
鏈接:http://www.hu.com/question/21061816/answer/60149117
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
5. java bitset or怎麼回事
JDK選擇long數組作為BitSet的內部存儲結構是出於性能的考慮,因為BitSet提供and和or這種操作,需要對兩個BitSet中的所有bit位做and或者or,實現的時候需要遍歷所有的數組元素。使用long能夠使得循環的次數降到最低,所以Java選擇使用long數組作