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 } ........ }
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注