Java集合的Stack、Queue、Map的遍历
 
在集合操作中,常常离不开对集合的遍历,对集合遍历一般来说一个foreach就搞定了,但是,对于Stack、Queue、Map类型的遍历,还是有一些讲究的。
 
最近看了一些代码,在便利Map时候,惨不忍睹,还有一些是遍历错误,忽略了队列、栈与普通Collection的差别导致的,这些代码就不作为反面教材了。
 
下面是常用的写法:
 
一、Map的遍历
 
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

 
二、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-----
0
1
2
3
4
-------2-----
0
1
2
3
4

Process finished with exit code 0

 
三、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

 
 
在遍历集合时候,优先考虑使用foreach语句来做,这样代码更简洁些。

转载:http://lavasoft.blog.51cto.com/62575/181781

Java集合的Stack、Queue、Map的遍历的更多相关文章

  1. Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)

    概要 学完了Map的全部内容,我们再回头开开Map的框架图. 本章内容包括:第1部分 Map概括第2部分 HashMap和Hashtable异同第3部分 HashMap和WeakHashMap异同 转 ...

  2. Java集合框架List,Map,Set等全面介绍

    Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +- ...

  3. 【转】Java集合框架List,Map,Set等全面介绍

    原文网址:http://android.blog.51cto.com/268543/400557 Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含 ...

  4. STL中stack/queue/map以及Boost unordered_map 的使用方法

    一.stackstack 模板类的定义在<stack>头文件中.stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要的,在不指定容器类型时,默认的容器类型 ...

  5. 34、Java集合框架List,Map,Set等全面介绍(转载)

      Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构.   Java集合框架的基本接口/类层次结构: java.util.C ...

  6. Java 集合系列之五:Map基本操作

    1. Java Map 1. Java Map 重要观点 Java Map接口是Java Collections Framework的成员.但是它不是Collection 将键映射到值的对象.一个映射 ...

  7. java 集合框架(十六)Map

    一.概述 Map是一个包含键值对的集合,一个map不能有重复的键(key),而且每个键至多只能对应一个值.Map同Collection一样,它的所有通用实现都会提供一个转换器构造函数,接收一个Map类 ...

  8. java集合(list,set,map)

    集合 集合与数组 数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用. 集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用. ...

  9. Java 集合系列Stack详细介绍(源码解析)和使用示例

    Stack简介 Stack是栈.它的特性是:先进后出(FILO, First In Last Out). java工具包中的Stack是继承于Vector(矢量队列)的,由于Vector是通过数组实现 ...

随机推荐

  1. Android onTouchEvent, onClick及onLongClick的调用机制

    针对屏幕上的一个View控件,Android如何区分应当触发onTouchEvent,还是onClick,亦或是onLongClick事件? 在Android中,一次用户操作可以被不同的View按次序 ...

  2. python 使用 redis expire属性设置访问时间间隔

    安装redis yum install redis 安装python redis扩展 pip install redis 启动redis,并设定开机自动启动 service redis start c ...

  3. php四种基础算法:冒泡,选择,插入和快速排序法

    转自:http://www.php100.com/html/php/rumen/2013/1029/6333.html 许多人都说 算法是程序的核心,一个程序的好于差,关键是这个程序算法的优劣.作为一 ...

  4. Sublime Text shift+ctrl妙用、Sublime Text快捷组合键大全

    Package Control 安装方法 首先通过快捷键 ctrl+` 或者 View > Show Console 打开控制台,然后粘贴相应的 Python 安装代码. 1 :按住shift+ ...

  5. eclipse字体推荐

    首先大家可以看看这里面推荐的最佳十款字体,http://www.iteye.com/news/11102-10-great-programming-font 但是经过测试发现,排名第一的字体在ecli ...

  6. SQL数据库约束行为---防止数据漏填

    防止有些该填的没有填:一.非空约束不能为NULL.操作:在表的设计界面中“允许NULL值”中的复选框去掉. 二.默认值.如果不给列赋值的话,会使用默认值填上.操作:在表的设计界面,选择相应的列,在下面 ...

  7. Creating Excel File in Oracle Forms

    Below is the example to create an excel file in Oracle Forms.Pass the Sql query string to the below ...

  8. lncRNA研究

    ------------------------------- Long noncoding RNAs are rarely translated in two human cell lines. ( ...

  9. Q查询

    一.Complex lookups with Q objects(Q对象的复杂查询) 仅仅靠单一的关键字参数查询已经很难满足查询要求.此时Django为我们提供了Q查询: class Q 1.Q对象( ...

  10. CUBRID学习笔记 47 show

    cubrid的中sql查询语法show c#,net,cubrid,教程,学习,笔记欢迎转载 ,转载时请保留作者信息.本文版权归本人所有,如有任何问题,请与我联系wang2650@sohu.com . ...