zoukankan      html  css  js  c++  java
  • 遍历集合方法总结

    遍历List方法一:普通的for循环

    for(int i=0;i<list.size();i++){
        String temp=(Stirng)get(i);
        System.out.println(temp);
    }  

    遍历List方法二:增强for循环(使用泛型)

    for(String temp:list){
        System.out.println(temp);
            }

    遍历List方法三:使用iterator迭代器(1)

    for(Iterator<Integer> iter=list.iterator();iter.hasNext();){
                Integer temp= iter.next();
                System.out.println(temp);
            }

    遍历List方法三:使用iterator迭代器(2)

    Iterator iter=list.iterator();
    while(iter.next()){
        Object obj=iter.next();
        iter.remove();//读取一个删除一个
        System.out.println(obj);
            }

    Set遍历方法一:增强for循环

    for(String temp:set){
        System.out.println(temp);
            }

    Set遍历方法二:使用iterator迭代器(1)

    for(Iterator<Integer> iter=set.iterator();iter.hasNext();){
                Integer temp= iter.next();
                System.out.println(temp);
            }

    遍历Map方法一:使用entrySet

    for(Iterator<Map.Entry<Integer,String>> iter=ss.iterator();iter.hasNext();){
                Map.Entry<Integer,String> temp=iter.next();
                System.out.println(temp);
            }

    遍历Map方法二:根据key获取value

    for (Iterator<Integer> iter = ss.iterator(); iter.hasNext(); ) {
                Integer temp = iter.next();
                System.out.println(temp);
            }

    这里for循环和增强for循环比较常见,所以着重讲解一下Iterator迭代器实现遍历List、Set、Map

    首先从Iterator源码分析:

    Iterator源码成员方法:hasNext();

    如果迭代有更多元素,则返回{@code true}。(换句话说,如果{@link #next}将返回一个元素而不是抛出异常,则返回{@code true}。)。

    next();

    
    

    返回迭代中的下一个元素。 @return迭代中的下一个元素@throws NoSuchElementException如果迭代没有更多的元素。

    remove();

    从底层集合中删除此迭代器返回的最后一个元素(可选操作)。每次调用{@link #next}时,此方法只能调用。如果在迭代正在进行中以除调用此*方法之外的任何方式修改基础集合,则未指定迭代器*的行为。 @implSpec 默认实现抛出 {@link UnsupportedOperationException}的实例,不执行任何其他操作。@throws UnsupportedOperationException如果此迭代器不支持{@code remove} 操作@throws IllegalStateException如果{@code next}方法尚未被调用,或者{@code remove}方法已经在最后一次调用{@code next} 方法后被调用。


    而又因为在List、Set、Map源码中都有erator<E> iterator();如果此列表包含指定的元素,则返回true 。更正式地,返回 true当且仅当此列表包含至少一个元素e 时,以适当的顺序返回此列表中元素的迭代器。以正确的顺序返回此列表中元素的迭代器。

    下面为示例:

    package jihe;
    
    import java.util.*;
    
    /**
     * 测试迭代器Iterator遍历List,Set,Map
     * author Gsan
     */
    public class TestIterator {
        public static void main(String[] args){
            testIteratorList();
            System.out.println("+++++++++++++++++++++++++++++");
            testIteratorSet();
            System.out.println("+++++++++++++++++++++++++++++");
            testIteratorMap1();
            System.out.println("+++++++++++++++++++++++++++++");
            testIteratorMap2();
        }
    
        public static void testIteratorList(){
            List<Integer> list=new ArrayList<>();
            list.add(1);
            list.add(3);
            list.add(2);
    
            for(Iterator<Integer> iter=list.iterator();iter.hasNext();){
                Integer temp= iter.next();
                System.out.println(temp);
            }
    
        }
    
        public static void testIteratorSet(){
            Set<String> set=new HashSet();
            set.add("aa");
            set.add("bb");
            set.add("cc");
    
            for(Iterator<String> iter=set.iterator();iter.hasNext();){
                String temp=iter.next();
                System.out.println(temp);
            }
        }
    
        //Map第一种遍历方法
        public static void testIteratorMap1(){
            Map<Integer,String> map=new HashMap<>();
            map.put(100,"张三");
            map.put(60,"李四");
            map.put(200,"赵六");
    
            //将Entry中的key和value集成集合
            Set<Map.Entry<Integer, String>> ss=map.entrySet();
    
            for(Iterator<Map.Entry<Integer,String>> iter=ss.iterator();iter.hasNext();){
                Map.Entry<Integer,String> temp=iter.next();
                System.out.println(temp);
            }
        }
    
        //Map第二种遍历方法
        public static void testIteratorMap2() {
            Map<Integer, String> map = new HashMap<>();
            map.put(100, "张三");
            map.put(60, "李四");
            map.put(200, "赵六");
    
            //将Entry中的key集成集合
            Set<Integer> ss = map.keySet();
    
            for (Iterator<Integer> iter = ss.iterator(); iter.hasNext(); ) {
                Integer temp = iter.next();
                System.out.println(temp);
            }
        }
    }

     运行结果:

  • 相关阅读:
    1123 Is It a Complete AVL Tree (30分)---如何建立平衡二叉搜索树(LL型RR型LR型RL型)+如何判断完全二叉树
    1021 Deepest Root (25 分)(经典搜索)
    PAT甲 1020 Tree Traversals (树的后序中序->层序)
    (数据结构)如何根据树的后序中序遍历求树的前序遍历
    习题2.3 数列求和-加强版 (模拟)
    PAT甲级 1051 Pop Sequence (25) && 2019天梯赛 L2-032 彩虹瓶 (25 分) (模拟+栈)
    PAT甲级 Are They Equal (25) (恶心模拟)
    PAT甲级1059 Prime Factors (25)(素数筛+求一个数的质因子)
    IO 模型
    Nginx 反向代理
  • 原文地址:https://www.cnblogs.com/Gsan/p/10503244.html
Copyright © 2011-2022 走看看