javabitset源碼
A. java bitset or怎麼回事
JDK選擇long數組作為BitSet的內部存儲結構是出於性能的考慮,因為BitSet提供and和or這種操作,需要對兩個BitSet中的所有bit位做and或者or,實現的時候需要遍歷所有的數組元素。使用long能夠使得循環的次數降到最低,所以Java選擇使用long數組作
B. java.lang.IndexOutOfBoundsException: Index: 5, Size: 5怎麼解決
<p style="font-size: 16px;" 用style屬性。
C. 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();
}
D. 在java中能直接把BitSet的對象直接輸入到二進制文件中嗎,用哪個流啊
package com.tuz;
import java.io.*;
public class MyTest {
public static void main(String[] args) {
String s = "010101";
int i = Integer.parseInt(s, 2);//按照2進制提取為十進制
try {
DataOutputStream out=
new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream("Data")));//Data是文件的名字
out.writeByte(i);
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
E. 為什麼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
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
F. 有沒有比java.util.BitSet更好的實現
可以基本沒有java web項目能離開這個包...
軟體包 java.util 的描述 包含集合框架、遺留的 collection 類、事件模型、日期和時間設施、國際化和各種實用工具類(字元串標記生成器、隨機數生成器和位數組、日期Date類、堆棧Stack類、向量Vector類等)。 包規范 Collections Framework Overview Collections Framework Annotated Outline 相關文檔 有關概述、教程、示例、指南和工具文檔的信息,請參閱: Collections Framework Tutorial Collections Framework Design FAQ 從以下版本開始: JDK1.0 Java的實用工具類庫java.util包。在這個包中,Java提供了一些實用的方法和數據結構。例如,Java提供日期(Data)類、日歷(Calendar)類來產生和獲取日期及時間,提供隨機數(Random)類產生各種類型的隨機數,還提供了堆棧(Stack)、向量(Vector) 、位集合(Bitset)以及哈希表(Hashtable)等類來表示相應的數據結構。 圖1.1給出了java.util包的基本層次結構圖。下面我們將具體介紹其中幾個重要的類。 ┌java.util.BitSet │java.util.Calendar │ └java.util.GregorianCalendar │java.util.Date │java.util.Dictionary │ └java.util.Hashtable │ └java.util.Properties │java.util.EventObject │java.util.ResourceBundle ┌普通類┤ ├java.util.ListResourceBundle │ │ └java.util.PropertyResourceBundle │ │java.util.Local │ │java.util.Observable │ │java.util.Random │ │java.util.StringTokenizer │ │java.util.Vector │ │ └java.util.Stack Java.util┤ └java.util.TimeZone │ └java.util.SimpleTimeZone │ ┌java.util.Enumeration ├接 口┤java.util.EventListener │ └java.util.Observer │ ┌java.util.EmptyStackException └異常類┤java.util.MissingResourceException │java.util.NoSuchElementException └java.util.TooManyListenersException
G. java bitset 最高多少位
publicstaticStringdo_post(Stringurl,List<NameValuePair>name_value_pair)throwsIOException{
Stringbody="{}";
DefaultHttpClienthttpclient=newDefaultHttpClient();
try{
HttpPosthttpost=newHttpPost(url);
httpost.setEntity(newUrlEncodedFormEntity(name_value_pair,StandardCharsets.UTF_8));
HttpResponseresponse=httpclient.execute(httpost);
HttpEntityentity=response.getEntity();
body=EntityUtils.toString(entity);
}finally{
httpclient.getConnectionManager().shutdown();
}
returnbody;
}
publicstaticStringdo_get(Stringurl)throwsClientProtocolException,IOException{
Stringbody="{}";
DefaultHttpClienthttpclient=newDefaultHttpClient();
try{
HttpGethttpget=newHttpGet(url);
HttpResponseresponse=httpclient.execute(httpget);
HttpEntityentity=response.getEntity();
body=EntityUtils.toString(entity);
}finally{
httpclient.getConnectionManager().shutdown();
}
returnbody;
}
H. java bitset size()
new一個BitSet(950)並不等於建立一個950大小的bs
只是說構建出來的bs初始大小至少能容納950個bit,大小永遠是系統控制的。而且他的大小是64的倍數,就算BitSet(1),他的大小也是64。
I. Java中BitSet是線程安全的么
不是線程安全的。沒有同步過
J. Java Bitset類位集合是什麼
此類實現了一個可變長的位向量。可以根據一個非負的索引來訪問每一個位,每個位的值都是一個 boolean值。