博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(转)java中对集合对象list的几种循环访问总结
阅读量:6230 次
发布时间:2019-06-21

本文共 4129 字,大约阅读时间需要 13 分钟。

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

Map
map = new HashMap
();map.put("d", 2);map.put("c", 1);map.put("b", 1);map.put("a", 3);List
> infoIds = new ArrayList
>(map.entrySet());//排序前for (int i = 0; i < infoIds.size(); i++) { String id = infoIds.get(i).toString(); System.out.println(id);}//d 2//c 1//b 1//a 3//排序Collections.sort(infoIds, new Comparator
>() { public int compare(Map.Entry
o1, Map.Entry
o2) { //return (o2.getValue() - o1.getValue()); return (o1.getKey()).toString().compareTo(o2.getKey()); }}); //排序后for (int i = 0; i < infoIds.size(); i++) { String id = infoIds.get(i).toString(); System.out.println(id);}//根据key排序//a 3//b 1//c 1//d 2//根据value排序//a 3//d 2//b 1//c 1
三、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()); 
//                } 
        } 
}
 
------1----- 
------2----- 
Process finished with exit code 0
 
 
在遍历集合时候,优先考虑使用foreach语句来做,这样代码更简洁些。

java中对集合对象list的几种循环访问的总结如下 
1 经典的for循环 
Java代码  
  1. public static void main(String[] args) {  
  2.           
  3.     List<String> list = new ArrayList();  
  4.     list.add("123");  
  5.     list.add("java");  
  6.     list.add("j2ee");  
  7.     System.out.println("=========经典的for循环=======");  
  8.     for(int i=0; i<list.size();i++){  
  9.     System.out.println(list.get(i));  
  10.    }  
  11. }  
2 增强的for循环 
Java代码  
  1. public static void main(String[] args) {  
  2.           
  3.     List<String> list = new ArrayList();  
  4.     list.add("123");  
  5.     list.add("java");  
  6.     list.add("j2ee");  
  7.     System.out.println("=========Java1.6的for循环=======");  
  8.     for(String s:list){  
  9.     System.out.println(s);  
  10.     }  
  11. }  
3 Iterate的使用 
Java代码  
  1. public static void main(String[] args) {  
  2.           
  3.          List<String> list = new ArrayList();  
  4.     list.add("123");  
  5.     list.add("java");  
  6.     list.add("j2ee");  
  7.     System.out.println("=========Iterate循环=======");  
  8.     Iterator<String> iter = list.iterator();  
  9.     while(iter.hasNext()){  
  10.     System.out.println(iter.next());  
  11.     }  
  12.           
  13. }  

 

转载地址:http://titna.baihongyu.com/

你可能感兴趣的文章
python 的日志logging模块学习
查看>>
HBase 源码编译错误: RpcServer.java: cannot find symbol
查看>>
zabbix监控中遇到的错误
查看>>
Centos7.5-文件权限管理
查看>>
Linux下安装wordpress和phpMyadmin,并为phpMyadmin添加ssl
查看>>
VM中文字界面linux调整分辨率
查看>>
tomcat虚拟主机 server.xml文件配置
查看>>
i-checks 简单应用
查看>>
列举数据挖掘领域的十大挑战性问题
查看>>
校园网解决方案分析
查看>>
Web Component 实战 读书笔记
查看>>
SpringMVC 参数注解
查看>>
源码构建lamp环境
查看>>
第四周作业
查看>>
/boot目录存储空间满导致apt-get安装软件失败
查看>>
LaTeX - 可伸缩箭头
查看>>
关于IT
查看>>
flask-SqlAlchemy QueuePool limit of size 5 overflow 10 reached
查看>>
显示salt进程具体名称
查看>>
HTTP GET方式提交与POST方式提交
查看>>