Java集合的Stack、Queue、Map的遍歷

在集合操做中,經常離不開對集合的遍歷,對集合遍歷通常來講一個foreach就搞定了,可是,對於Stack、Queue、Map類型的遍歷,仍是有一些講究的。
 
最近看了一些代碼,在便利Map時候,慘不忍睹,還有一些是遍歷錯誤,忽略了隊列、棧與普通Collection的差異致使的,這些代碼就不做爲反面教材了。
 
下面是經常使用的寫法:
 
1、Map的遍歷
 
import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Map; 

/** 
* Map的遍歷,這個遍歷比較特殊,有技巧 

* @author leizhimin 2009-7-22 15:15:34 
*/
 
public  class TestMap { 
         public  static  void main(String[] args) { 
                Map<String, String> map =  new HashMap<String, String>(); 
                map.put( "1""a"); 
                map.put( "2""b"); 
                map.put( "3""c"); 

                 //最簡潔、最通用的遍歷方式 
                 for (Map.Entry<String, String> entry : map.entrySet()) { 
                        System.out.println(entry.getKey() +  " = " + entry.getValue()); 
                } 
                 //Java5以前的比較簡潔的便利方式1 
                System.out.println( "----1----"); 
                 for (Iterator<Map.Entry<String, String>> it = map.entrySet().iterator(); it.hasNext();) { 
                        Map.Entry<String, String> entry = it.next(); 
                        System.out.println(entry.getKey() +  " = " + entry.getValue()); 
                } 
                 //Java5以前的比較簡潔的便利方式2 
                System.out.println( "----2----"); 
                 for (Iterator<String> it = map.keySet().iterator(); it.hasNext();) { 
                        String key = it.next(); 
                        System.out.println(key +  " = " + map.get(key)); 
                } 
        } 
}
 
3 = c 
2 = b 
1 = a 
----1---- 
3 = c 
2 = b 
1 = a 
----2---- 
3 = c 
2 = b 
1 = a 

Process finished with exit code 0
 
2、Queue的遍歷
 
import java.util.Queue; 
import java.util.concurrent.LinkedBlockingQueue; 

/** 
* 隊列的遍歷 

* @author leizhimin 2009-7-22 15:05:14 
*/
 
public  class TestQueue { 
         public  static  void main(String[] args) { 
                Queue<Integer> q =  new LinkedBlockingQueue<Integer>(); 
                 //初始化隊列 
                 for ( int i = 0; i < 5; i++) { 
                        q.offer(i); 
                } 
                System.out.println( "-------1-----"); 
                 //集合方式遍歷,元素不會被移除 
                 for (Integer x : q) { 
                        System.out.println(x); 
                } 
                System.out.println( "-------2-----"); 
                 //隊列方式遍歷,元素逐個被移除 
                 while (q.peek() !=  null) { 
                        System.out.println(q.poll()); 
                } 
        } 
}
 
-------1----- 





-------2----- 






Process finished with exit code 0
 
3、Stack的遍歷
 
import java.util.Stack; 

/** 
* 棧的遍歷 

* @author leizhimin 2009-7-22 14:55:20 
*/
 
public  class TestStack { 
         public  static  void main(String[] args) { 
                Stack<Integer> s =  new Stack<Integer>(); 
                 for ( int i = 0; i < 10; i++) { 
                        s.push(i); 
                } 
                 //集合遍歷方式 
                 for (Integer x : s) { 
                        System.out.println(x); 
                } 
                System.out.println( "------1-----"); 
                 //棧彈出遍歷方式 
//                while (s.peek()!=null) {     //不健壯的判斷方式,容易拋異常,正確寫法是下面的 
                 while (!s.empty()) { 
                        System.out.println(s.pop()); 
                } 
                System.out.println( "------2-----"); 
                 //錯誤的遍歷方式 
//                for (Integer x : s) { 
//                        System.out.println(s.pop()); 
//                } 
        } 
}
 
0  1  2  3  4  ------1-----  4  3  2  1  0  ------2-----  Process finished with exit code 0
相關文章
相關標籤/搜索