第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

遍歷HashMap

遍歷HashMap

炎炎設(shè)計 2019-06-05 10:52:41
遍歷HashMap在HashMap?
查看完整描述

3 回答

?
明月笑刀無情

TA貢獻(xiàn)1828條經(jīng)驗 獲得超4個贊

如果您只對鍵感興趣,則可以遍歷keySet()地圖:

Map<String,?Object>?map?=?...;for?(String?key?:?map.keySet())?{
????//?...}

如果您只需要這些值,請使用values():

for?(Object?value?:?map.values())?{
????//?...}

最后,如果要同時使用鍵和值,請使用entrySet():

for?(Map.Entry<String,?Object>?entry?:?map.entrySet())?{
????String?key?=?entry.getKey();
????Object?value?=?entry.getValue();
????//?...}

請注意:如果要在迭代過程中刪除項,則需要通過Iterator進(jìn)行刪除。

查看完整回答
反對 回復(fù) 2019-06-05
?
慕神8447489

TA貢獻(xiàn)1780條經(jīng)驗 獲得超1個贊

從引用中提取如何在Java中迭代Map:

有幾種方法可以迭代Map在爪哇。讓我們回顧一下最常用的方法,并回顧它們的優(yōu)缺點。由于Java中的所有映射都實現(xiàn)了Map接口,所以以下技術(shù)將適用于任何地圖實現(xiàn)(HashMap,?TreeMap,?LinkedHashMap,?Hashtable等等)

方法1使用for-each循環(huán)迭代條目。

這是最常見的方法,在大多數(shù)情況下更可取。如果您需要循環(huán)中的映射鍵和值,則應(yīng)該使用它。

Map<Integer,?Integer>?map?=?new?HashMap<Integer,?Integer>();for?(Map.Entry<Integer,?Integer>?entry?:?map.entrySet())?{
????System.out.println("Key?=?"?+?entry.getKey()?+?",?Value?=?"?+?entry.getValue());}

請注意,for-each循環(huán)是在Java 5中引入的,因此該方法僅適用于新版本的語言。每個循環(huán)都會拋出NullPointerException如果您試圖在一個為空的映射上迭代,那么在迭代之前,您應(yīng)該始終檢查空引用。

方法2:使用for-each循環(huán)迭代鍵或值。

如果只需要映射中的鍵或值,則可以迭代鍵集或值,而不是entrySet。

Map<Integer,?Integer>?map?=?new?HashMap<Integer,?Integer>();//?Iterating?over?keys?onlyfor?(Integer?key?:?map.keySet())?{
????System.out.println("Key?=?"?+?key);}//?Iterating?over?values?onlyfor?(Integer?value?:?map.values())?{
????System.out.println("Value?=?"?+?value);}

這種方法比傳統(tǒng)的方法具有較小的性能優(yōu)勢。entrySet迭代(大約快10%)并且更干凈。

方法3使用Iterator進(jìn)行迭代。

使用泛型:

Map<Integer,?Integer>?map?=?new?HashMap<Integer,?Integer>();Iterator<Map.Entry<Integer,?Integer>>?entries?=?map.entrySet()
.iterator();while?(entries.hasNext())?{
????Map.Entry<Integer,?Integer>?entry?=?entries.next();
????System.out.println("Key?=?"?+?entry.getKey()?+?",?Value?=?"?+?entry.getValue());}

無一般性:

Map?map?=?new?HashMap();Iterator?entries?=?map.entrySet().iterator();while?(entries.hasNext())?{
????Map.Entry?entry?=?(Map.Entry)?entries.next();
????Integer?key?=?(Integer)entry.getKey();
????Integer?value?=?(Integer)entry.getValue();
????System.out.println("Key?=?"?+?key?+?",?Value?=?"?+?value);}

您也可以使用相同的技術(shù)來迭代。keySet或者價值觀。

這種方法看起來可能是多余的,但它有自己的優(yōu)點。首先,它是在舊版本的Java中迭代映射的唯一方法。另一個重要的特性是,它是允許您在迭代期間通過調(diào)用iterator.remove()..如果您在每次迭代中嘗試這樣做,您將得到“不可預(yù)測的結(jié)果”。

從性能的角度來看,此方法等于for-每一次迭代。

方法4迭代鍵和搜索值(效率低下)。

Map<Integer,?Integer>?map?=?new?HashMap<Integer,?Integer>();for?(Integer?key?:?map.keySet())?{
????Integer?value?=?map.get(key);
????System.out.println("Key?=?"?+?key?+?",?Value?=?"?+?value);}

這可能看起來是方法1的一個更干凈的替代方案,但實際上它非常慢,而且效率很低,因為通過鍵獲取值可能很費(fèi)時(在不同的Map實現(xiàn)中,這種方法比方法1慢20%-200%)。如果安裝了FindBugs,它將檢測到這一點,并警告您注意效率低下的迭代。這種方法應(yīng)該避免。

結(jié)論:

如果只需要映射中的鍵或值,請使用方法2。如果您使用了Java的舊版本(小于5),或者計劃在迭代期間刪除條目,則必須使用方法3。否則使用方法1。


查看完整回答
反對 回復(fù) 2019-06-05
  • 3 回答
  • 0 關(guān)注
  • 498 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號