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

首頁 > 編程 > 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               }                ........  }


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 获嘉县| 门源| 剑川县| 旌德县| 庆阳市| 肇庆市| 珠海市| 靖宇县| 郓城县| 靖西县| 唐海县| 乌拉特后旗| 乌审旗| 偃师市| 齐齐哈尔市| 汉沽区| 萨嘎县| 贡嘎县| 宜良县| 南乐县| 奉新县| 肥西县| 洛南县| 崇阳县| 保亭| 黄梅县| 石门县| 湾仔区| 抚远县| 邻水| 竹北市| 高尔夫| 马山县| 威宁| 威远县| 谷城县| 诸城市| 沧源| 新疆| 五寨县| 青岛市|