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之Handler用法总结(1)

    方法一:(java习惯,在android平台开发时这样是不行的,因为它违背了单线程模型) 刚刚开始接触android线程编程的时候,习惯好像java一样,试图用下面的代码解决问题 new Thread ...

  2. Uniform Generator 分类: HDU 2015-06-19 23:26 11人阅读 评论(0) 收藏

    Uniform Generator Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...

  3. opencv通过dll调用matlab函数,图片作为参数

    [blog 项目实战派]opencv通过dll调用matlab函数,图片作为参数                   前文介绍了如何“csharp通过dll调用opencv函数,图片作为参数”.而在实 ...

  4. 《利用python进行数据分析》读书笔记--第十章 时间序列(三)

    7.时间序列绘图 pandas时间序列的绘图功能在日期格式化方面比matplotlib原生的要好. #-*- coding:utf-8 -*- import numpy as np import pa ...

  5. JAVA基础知识之IO-File类

    File类介绍 File是java.io包下面的一个类,代表与平台无关的文件或者目录.JAVA中,无论文件还是目录,都可以看作File类的一个对象.File类能对文件或目录新建,删除,获取属性等操作, ...

  6. zoj Treasure Hunt IV

    Treasure Hunt IV Time Limit: 2 Seconds      Memory Limit: 65536 KB Alice is exploring the wonderland ...

  7. Codeforces Round #260 (Div. 2) B

    Description Fedya studies in a gymnasium. Fedya's maths hometask is to calculate the following expre ...

  8. 【Java】JDBC连接MySQL

    JDBC连接MySQL 虽然在项目中通常用ORM的框架实现持久化.但经常因测试某些技术的需要,要写一个完整的JDBC查询数据库.写一个在这儿备份. 首先引入驱动包: <dependencies& ...

  9. SqlSever基础 两个条件 group by 分组显示

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  10. C#实现ActiveX控件开发与部署

    现在,我们手里已经有了这个控件包:QRCode.cab,下面我们编写一个测试的网页 <html> <head> <title>无标题页</title> ...