Java編程中的HashSet和BitSet詳解
Java編程中的HashSet和BitSet詳解
我在Apache的開發(fā)郵件列表中發(fā)現(xiàn)一件很有趣的事,Apache Commons包的ArrayUtils類的removeElements方法,原先使用的HashSet現(xiàn)在換成了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));
新代碼如下:
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呢?
據(jù)Apache Commons作者指出,這樣代碼執(zhí)行時可以占用更少的內(nèi)存,速度也更快。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
spring學(xué)習之util:properties的使用
這篇文章主要介紹了spring學(xué)習之util:properties的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
Java并發(fā)編程中使用Executors類創(chuàng)建和管理線程的用法
這篇文章主要介紹了Java并發(fā)編程中使用Executors類創(chuàng)建和管理線程的用法,文中舉了用其啟動線程和設(shè)置線程優(yōu)先級的例子,需要的朋友可以參考下2016-03-03
關(guān)于springboot-starter-undertow和tomcat的區(qū)別說明
這篇文章主要介紹了關(guān)于springboot-starter-undertow和tomcat的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
Java通過JNI調(diào)用C++動態(tài)庫的完整流程詳解
JNI(Java Native Interface),是實現(xiàn)Java/Kotlin與C/C++語言之間交互的橋梁,本文主要為大家介紹了Java通過JNI調(diào)用C++動態(tài)庫的完整流程,需要的可以參考下2025-04-04
Springboot jar運行時如何將jar內(nèi)的文件拷貝到文件系統(tǒng)中
因為執(zhí)行需要,需要把jar內(nèi)templates文件夾下的的文件夾及文件加壓到宿主機器的某個路徑下,以便執(zhí)行對應(yīng)的腳本文件,這篇文章主要介紹了Springboot jar運行時如何將jar內(nèi)的文件拷貝到文件系統(tǒng)中,需要的朋友可以參考下2024-06-06
Java實現(xiàn)JDBC連接數(shù)據(jù)庫簡單案例
這篇文章主要介紹了Java實現(xiàn)JDBC連接數(shù)據(jù)庫簡單案例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08

