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);
為什么會(huì)使用BitSet代替HashSet呢?
據(jù)Apache Commons作者指出,這樣代碼執(zhí)行時(shí)可以占用更少的內(nèi)存,速度也更快。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- 淺析Java中Map與HashMap,Hashtable,HashSet的區(qū)別
- Java中HashMap和Hashtable及HashSet的區(qū)別
- HashMap 和 HashSet的區(qū)別
- Java中的HashSet詳解和使用示例_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- java 中HashMap、HashSet、TreeMap、TreeSet判斷元素相同的幾種方法比較
- hashset去除重復(fù)值原理實(shí)例解析
- HashSet和TreeSet使用方法的區(qū)別解析
- 詳解Java中HashSet和TreeSet的區(qū)別
- 一次因HashSet引起的并發(fā)問題詳解
相關(guān)文章
spring學(xué)習(xí)之util:properties的使用
這篇文章主要介紹了spring學(xué)習(xí)之util:properties的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
Java并發(fā)編程中使用Executors類創(chuàng)建和管理線程的用法
這篇文章主要介紹了Java并發(fā)編程中使用Executors類創(chuàng)建和管理線程的用法,文中舉了用其啟動(dòng)線程和設(shè)置線程優(yōu)先級(jí)的例子,需要的朋友可以參考下2016-03-03
關(guān)于springboot-starter-undertow和tomcat的區(qū)別說明
這篇文章主要介紹了關(guān)于springboot-starter-undertow和tomcat的區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
MyBatis框架關(guān)聯(lián)映射實(shí)例詳解
這篇文章主要介紹了MyBatis框架關(guān)聯(lián)映射,關(guān)系映射主要處理復(fù)雜的SQl查詢,如子查詢,多表聯(lián)查等復(fù)雜查詢,應(yīng)用此種需求時(shí)可以考慮使用,需要的朋友可以參考下2022-11-11
Java通過JNI調(diào)用C++動(dòng)態(tài)庫(kù)的完整流程詳解
JNI(Java Native Interface),是實(shí)現(xiàn)Java/Kotlin與C/C++語(yǔ)言之間交互的橋梁,本文主要為大家介紹了Java通過JNI調(diào)用C++動(dòng)態(tài)庫(kù)的完整流程,需要的可以參考下2025-04-04
Springboot jar運(yùn)行時(shí)如何將jar內(nèi)的文件拷貝到文件系統(tǒng)中
因?yàn)閳?zhí)行需要,需要把jar內(nèi)templates文件夾下的的文件夾及文件加壓到宿主機(jī)器的某個(gè)路徑下,以便執(zhí)行對(duì)應(yīng)的腳本文件,這篇文章主要介紹了Springboot jar運(yùn)行時(shí)如何將jar內(nèi)的文件拷貝到文件系統(tǒng)中,需要的朋友可以參考下2024-06-06
Java實(shí)現(xiàn)JDBC連接數(shù)據(jù)庫(kù)簡(jiǎn)單案例
這篇文章主要介紹了Java實(shí)現(xiàn)JDBC連接數(shù)據(jù)庫(kù)簡(jiǎn)單案例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2018-08-08

