面試:如何決定使用 HashMap 還是 TreeMap?
這里是碼農(nóng)充電第一站,回復(fù)“666”,獲取一份專屬大禮包 真愛,請設(shè)置“星標(biāo)”或點(diǎn)個“在看”
TreeMap的Key值是要求實(shí)現(xiàn)java.lang.Comparable,所以迭代的時候TreeMap默認(rèn)是按照Key值升序排序的;TreeMap的實(shí)現(xiàn)是基于紅黑樹結(jié)構(gòu)。適用于按自然順序或自定義順序遍歷鍵(key)。HashMap的Key值實(shí)現(xiàn)散列hashCode(),分布是散列的、均勻的,不支持排序;數(shù)據(jù)結(jié)構(gòu)主要是桶(數(shù)組),鏈表或紅黑樹。適用于在Map中插入、刪除和定位元素。hashCode()和equals()[可以重寫hashCode()和equals()],為了優(yōu)化HashMap空間的使用,您可以調(diào)優(yōu)初始容量和負(fù)載因子。HashMap(): 構(gòu)建一個空的哈希映像 HashMap(Map m): 構(gòu)建一個哈希映像,并且添加映像m的所有映射 HashMap(int initialCapacity): 構(gòu)建一個擁有特定容量的空的哈希映像 HashMap(int initialCapacity, float loadFactor): 構(gòu)建一個擁有特定容量和加載因子的空的哈希映像
TreeMap():構(gòu)建一個空的映像樹 TreeMap(Map m): 構(gòu)建一個映像樹,并且添加映像m中所有元素 TreeMap(Comparator c): 構(gòu)建一個映像樹,并且使用特定的比較器對關(guān)鍵字進(jìn)行排序 TreeMap(SortedMap s): 構(gòu)建一個映像樹,添加映像樹s中所有映射,并且使用與有序映像s相同的比較器排序
如果參數(shù)字符串等于此字符串,則返回 0 值; 如果此字符串小于字符串參數(shù),則返回一個小于 0 的值; 如果此字符串大于字符串參數(shù),則返回一個大于 0 的值。
static?class?MyComparator?implements?Comparator{
????@Override
????public?int?compare(Object?o1,?Object?o2)?{
????????//?TODO?Auto-generated?method?stub
????????String?param1?=?(String)o1;
????????String?param2?=?(String)o2;
????????return?-param1.compareTo(param2);
????}
}
MyComparator?comparator?=?new?MyComparator();
Map?map?=?new?TreeMap (comparator);
public?class?MapTest?{
????public?static?void?main(String[]?args)?{
????????//初始化自定義比較器
????????MyComparator?comparator?=?new?MyComparator();
????????//初始化一個map集合
????????Map?map?=?new?TreeMap (comparator);
????????//存入數(shù)據(jù)
????????map.put("a",?"a");
????????map.put("b",?"b");
????????map.put("f",?"f");
????????map.put("d",?"d");
????????map.put("c",?"c");
????????map.put("g",?"g");
????????//遍歷輸出
????????Iterator?iterator?=?map.keySet().iterator();
????????while(iterator.hasNext()){
????????????String?key?=?(String)iterator.next();
????????????System.out.println(map.get(key));
????????}
????}
????static?class?MyComparator?implements?Comparator{
????????@Override
????????public?int?compare(Object?o1,?Object?o2)?{
????????????//?TODO?Auto-generated?method?stub
????????????String?param1?=?(String)o1;
????????????String?param2?=?(String)o2;
????????????return?-param1.compareTo(param2);
????????}
????}
}
END
---END--- 重磅!碼農(nóng)突圍-技術(shù)交流群已成立 掃碼可添加碼農(nóng)突圍助手,可申請加入碼農(nóng)突圍大群和細(xì)分方向群,細(xì)分方向已涵蓋:Java、Python、機(jī)器學(xué)習(xí)、大數(shù)據(jù)、人工智能等群。 一定要備注:開發(fā)方向+地點(diǎn)+學(xué)校/公司+昵稱(如Java開發(fā)+上海+拼夕夕+猴子),根據(jù)格式備注,可更快被通過且邀請進(jìn)群 ▲長按加群 推薦閱讀
? GitHub宣布已將所有代碼永久封存于北極地底1000年!網(wǎng)友炸鍋了:我寫的bug終于能流傳永世了! ?? 優(yōu)秀!94年出生的她,受聘為深圳大學(xué)正教授! ???使用 IDEA 幾分鐘就重構(gòu)了同事800 行"又臭又長" 的類!真香! ???雷軍1994年寫的老代碼曝光,被稱像詩一樣優(yōu)雅 ?? 推薦 33 個 IDEA 最牛配置,好用到飛起來! ?? 同事:你居然還在用 try catch 處理異常?有點(diǎn)Low啊 最近面試BAT,整理一份面試資料《Java面試BAT通關(guān)手冊》,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。 獲取方式:點(diǎn)“在看”,關(guān)注公眾號并回復(fù)?BAT?領(lǐng)取,更多內(nèi)容陸續(xù)奉上。 如有收獲,點(diǎn)個在看,誠摯感謝 明天見(??ω??)??
評論
圖片
表情


