国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java遍歷List、Map、Set方法以及比較

2019-11-11 05:58:15
字體:
供稿:網(wǎng)友

一、java遍歷List

1、方法一:普通for循環(huán)

for( int i = 0 ; i < list.size() ; i++) {//內(nèi)部不鎖定,效率最高,但在多線程要考慮并發(fā)操作的問題。    System.out.PRintln(list.get(i));}2、方法二:增強(qiáng)for循環(huán)

for(String str : list) {//其內(nèi)部實(shí)質(zhì)上還是調(diào)用了迭代器遍歷方式,這種循環(huán)方式還有其他限制,不建議使用。    System.out.println(str);}
3、方法三:迭代器遍歷
Iterator<String> iter = list.iterator();while(iter.hasNext()){  //執(zhí)行過程中會(huì)執(zhí)行數(shù)據(jù)鎖定,性能稍差,若在循環(huán)過程中要去掉某個(gè)元素只能調(diào)用iter.remove()方法。    System.out.println(iter.next());}--------------------------------------------------------------------------------------------------------------------------

二、java遍歷Map

1、方法一:在for-each循環(huán)中使用entries來遍歷這是最常見也是大多數(shù)情況下最可取的方式,在鍵值都需要時(shí)使用。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());    } 2、方法二:在for-each循環(huán)中遍歷keys或values

如果只需要map中的鍵或者值,你可以通過keySet或values來實(shí)現(xiàn)遍歷,而不是用entrySet。

Map<Integer, Integer> map = new HashMap<Integer, Integer>();    //遍歷map中的鍵    for (Integer key : map.keySet()) {        System.out.println("Key = " + key);    }    //遍歷map中的值    for (Integer value : map.values()) {        System.out.println("Value = " + value);    } 

該方法比entrySet遍歷在性能上稍好(快了10%),而且代碼更加干凈。

3、方法三:通過鍵找值的方式(效率低)

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);    }作為方法一的替代,這個(gè)代碼看上去更加干凈;但實(shí)際上它相當(dāng)慢且無效率。因?yàn)閺逆I取值是耗時(shí)的操作(與方法一相比,在不同的Map實(shí)現(xiàn)中該方法慢了20%~200%)。如果你安裝了FindBugs,它會(huì)做出檢查并警告你關(guān)于哪些是低效率的遍歷。所以盡量避免使用。

4、方法四:使用Iterator遍歷

(1)使用泛型:

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());    } (2)不使用泛型

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);    } 

你也可以在keySet和values上應(yīng)用同樣的方法。

該種方式看起來冗余卻有其優(yōu)點(diǎn)所在。首先,在老版本java中這是惟一遍歷map的方式。另一個(gè)好處是,你可以在遍歷時(shí)調(diào)用iterator.remove()來刪除entries,另兩個(gè)方法則不能。根據(jù)javadoc的說明,如果在for-each遍歷中嘗試使用此方法,結(jié)果是不可預(yù)測(cè)的。

從性能方面看,該方法類同于for-each遍歷(即方法二)的性能。

map總結(jié):

如果僅需要鍵(keys)或值(values)使用方法二。如果你使用的語言版本低于java 5,或是打算在遍歷時(shí)刪除entries,必須使用方法四。否則使用方法一(鍵值都要)。

三:java遍歷Set

1、方法一:迭代器循環(huán)Set<String> set = new HashSet<String>();  Iterator<String> it = set.iterator();  while (it.hasNext()) {    String str = it.next();    System.out.println(str);  }  2、方法二:for-each循環(huán)for (String str : set) {        System.out.println(str);  }      優(yōu)點(diǎn)還體現(xiàn)在泛型 假如 set中存放的是Object    Set<Object> set = new HashSet<Object>();  for循環(huán)遍歷:  for (Object obj: set) {        if(obj instanceof Integer){                  int aa= (Integer)obj;               }else if(obj instanceof String){                 String aa = (String)obj               }                ........  }


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 禄丰县| 屏东市| 临沂市| 什邡市| 德保县| 绍兴县| 中山市| 湖南省| 晋城| 奈曼旗| 弥勒县| 宾川县| 班戈县| 瑞昌市| 兰州市| 建德市| 宁陕县| 福安市| 年辖:市辖区| 玉树县| 郁南县| 类乌齐县| 丹东市| 西乌珠穆沁旗| 板桥市| 洛扎县| 大竹县| 行唐县| 顺义区| 富平县| 萍乡市| 西充县| 焦作市| 江源县| 平塘县| 顺义区| 三江| 定兴县| 嘉峪关市| 昌江| 东兰县|