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 } ........ }
新聞熱點
疑難解答