麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Java > 正文

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

2019-11-11 06:51:43
字體:
來源:轉載
供稿:網友

一、java遍歷List

1、方法一:普通for循環

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

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

二、java遍歷Map

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

如果只需要map中的鍵或者值,你可以通過keySet或values來實現遍歷,而不是用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);    }作為方法一的替代,這個代碼看上去更加干凈;但實際上它相當慢且無效率。因為從鍵取值是耗時的操作(與方法一相比,在不同的Map實現中該方法慢了20%~200%)。如果你安裝了FindBugs,它會做出檢查并警告你關于哪些是低效率的遍歷。所以盡量避免使用。

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上應用同樣的方法。

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

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

map總結:

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

三:java遍歷Set

1、方法一:迭代器循環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循環for (String str : set) {        System.out.println(str);  }      優點還體現在泛型 假如 set中存放的是Object    Set<Object> set = new HashSet<Object>();  for循環遍歷:  for (Object obj: set) {        if(obj instanceof Integer){                  int aa= (Integer)obj;               }else if(obj instanceof String){                 String aa = (String)obj               }                ........  }


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 91精品国产99久久久久久红楼 | 91久久久久| 92看片淫黄大片欧美看国产片 | 一本视频在线观看 | 久久亚洲一区二区三区成人国产 | 国产精品影视 | 久久久久免费电影 | 亚洲小视频在线播放 | 成人午夜免费看 | 中文字幕综合在线观看 | h色视频网站 | 成人情欲视频在线看免费 | 毛片电影在线看 | 免费小毛片 | 在线小视频国产 | 欧美成人理论片乱 | 毛片在哪看 | 久草手机在线观看视频 | 欧美一级视频免费看 | 在线播放一区二区三区 | 精品国产一区二区三区四区阿崩 | 亚州综合网 | 精品国产一区二区亚洲人成毛片 | 九九热视频这里只有精品 | 一级黄色毛片免费 | 久久国产免费 | 日美黄色片 | 日韩视频在线观看免费视频 | 91精品国产综合久久久欧美 | 久久免费综合视频 | 成人在线视频播放 | 精品国产乱码久久久久久久 | 日本在线视频一区二区三区 | 亚洲国产精品久久久久 | a黄色网 | 国产在线精品一区二区三区 | 日本精品黄色 | 369看片你懂的小视频在线观看 | 国产69精品久久久久久久久久 | 亚洲va国产va | 免费观看一区二区三区视频 |