Java程式設計中的HashSet和BitSet
版權宣告:本文為博主chszs的原創文章,未經博主允許不得轉載。 https://blog.csdn.net/chszs/article/details/8112839
作者:chszs,轉載需註明。
作者部落格主頁:http://blog.csdn.net/chszs
我在Apache的開發郵件列表中發現一件很有趣的事,Apache Commons包的ArrayUtils類的removeElements方法,原先使用的HashSet現在換成了BitSet。
HashSet<Integer> toRemove = new HashSet<Integer>();
for (Map.Entry<Character, MutableInt> e : occurrences.entrySet()) {
Character v = e.getKey();
int found = 0;
for (int i = 0, ct = e.getValue().intValue(); i < ct; i++) {
found = indexOf(array, v.charValue(), found);
if (found < 0) {
break;
}
toRemove.add(found++);
}
}
return (char[]) removeAll((Object)array, extractIndices(toRemove));
作者:chszs,轉載需註明。作者部落格主頁:http://blog.csdn.net/chszs
新程式碼如下:
BitSet toRemove = new BitSet();
for (Map.Entry<Character, MutableInt> e : occurrences.entrySet()) {
Character v = e.getKey();
int found = 0;
for (int i = 0, ct = e.getValue().intValue(); i < ct; i++) {
found = indexOf(array, v.charValue(), found);
if (found < 0) {
break;
}
toRemove.set(found++);
}
}
return (char[]) removeAll(array, toRemove);
為什麼會使用BitSet代替HashSet呢?
據Apache Commons作者指出,這樣程式碼執行時可以佔用更少的記憶體,速度也更快。
相關文章
- 好程式設計師Java培訓分享treeset和hashset的區別程式設計師Java
- golang 效能優化之 bitset 代替 hashsetGolang優化
- Java結合中的HashSetJava
- 轉:Java中的HashSet, TreeSet, HashMap, TreeMapJavaHashMap
- Java HashMap 和 HashSet 的高效使用技巧JavaHashMap
- Java 網路程式設計(TCP程式設計 和 UDP程式設計)Java程式設計TCPUDP
- Java中的面向切面程式設計(AOP)Java程式設計
- 讀懂Java中的Socket程式設計Java程式設計
- Java中的設計模式和原則Java設計模式
- Java 中的資料流和函數語言程式設計Java函數程式設計
- Java併發程式設計中的設計模式解析(一)Java程式設計設計模式
- java中須遵守的程式設計風格Java程式設計
- plsql中的procedure和function程式設計SQLFunction程式設計
- 好程式設計師分享HashSet實現去除重複元素程式設計師
- HashSet中重寫haseCode和equals
- Java和Python的程式設計對比JavaPython程式設計
- Java集合框架原始碼剖析:HashSet 和 HashMapJava框架原始碼HashMap
- Java 集合框架 HashSet 和 HashMap 原始碼剖析Java框架HashMap原始碼
- Java集合系列-HashSetJava
- Java中的按位操作——Java程式設計思想筆記Java程式設計筆記
- HashSet和HashMapHashMap
- Java 併發程式設計(八) -- AbstractQueuedSynchronizer中的NodeJava程式設計
- java程式設計師理解js中的閉包Java程式設計師JS
- Vector在Java程式設計中的應用 (轉)Java程式設計
- Java中的非同步網路程式設計 (轉)Java非同步程式設計
- Java中的函數語言程式設計(八)流Stream並行程式設計Java函數程式設計並行行程
- java面試-Java併發程式設計(五)——中斷Java面試程式設計
- 【北京】誠聘java程式設計師和高階程式設計師Java程式設計師
- Java程式設計師必備的工具和框架Java程式設計師框架
- Java中異常處理和設計Java
- 好程式設計師Java教程分享Java中this的幾種用法程式設計師Java
- 好程式設計師Java學習路線之Java中的物件流和序列化程式設計師Java物件
- Java原始碼系列 -- HashSetJava原始碼
- 怎麼從初、中級Java程式設計師過渡到高階Java程式設計師?Java程式設計師
- Java 併發程式設計(十) -- ReentrantLock中的SyncJava程式設計ReentrantLock
- Java 併發程式設計(六) -- ThreadPoolExecutor中的WorkerJava程式設計thread
- Java併發程式設計的藝術(五)——中斷Java程式設計
- 計算機程式的思維邏輯 (41) – 剖析HashSet計算機