zoukankan      html  css  js  c++  java
  • Java 遍历List, Set, Map的正确姿势

    ​Java中 List , Set 有共同的父类, 就是Collection.  所有实现Collection的接口的类都有一个iterator方法,用以返回一个Iterator接口的对象.

    Iterator 接口定义如下:

    Boolean hasNext();   //判断是否有元素没有被遍历

    Object next();          //返回游标当前位置的元素并将游标移动到下一个位置

    void remove();         //删除游标左边的元素, 在执行完成next() 后该操作只能执行一次

    两者区别是:

        List允许重复元素, 存储是有序的, 即元素插入和读取的顺序是一致的.

        Set不允许有相同的元素存在, 存储是无序的, 也就是插入的元素顺序和读取出来的元素顺序会不一致.

    List ,Set , Map 下的子类:

    Collection
    ├List
    │├LinkedList
    │├ArrayList
    │└Vector
    └Set
    |-HashSet
    └TreeSet
    Map
    ├Hashtable
    ├HashMap
    └WeakHashMap

    子类的区别诸如 实现方式, 是否线程安全等等, 这里就不展开介绍了.

     Map 是独立的集合, 采用键值对来存储数据也就是key-value的双列形式, 特点是键不能重复, 值可以重复. 

    让我们来看下遍历的方式有哪些:

    使用Intellij IDE 环境, Maven 中配置文件pom.xml添加testng

     
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.api.test</groupId>
        <artifactId>test</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <properties>
            <!-- 指明编译源代码时使用的字符编码,maven编译的时候默认使用的GBK编码,
             通过project.build.sourceEncoding属性设置字符编码,告诉maven这个项目使用UTF-8来编译 -->
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    
            <!--这里可以设置需要运行group-->
            <groupsTest>execShell</groupsTest>
        </properties>
    
        <dependencies>
    
            <dependency>
                <groupId>org.testng</groupId>
                <artifactId>testng</artifactId>
                <version>7.0.0</version>
            </dependency>
        </dependencies>
    
    </project>

    创建utl  package,  并新建一个ListDemo.java

     
    package utl;
    
    import org.testng.annotations.Test;
    import java.util.Map.Entry;
    import java.util.*;
    
    public class ListDemo {
    
        @Test
        public void testList(){
    
            System.out.println("--------遍历list--------");
            //遍历List
            List  list=new ArrayList();
            list.add("张三");
            list.add("李四");
            list.add("王五");
            list.add("赵六");
    
            //foreach 循环, 遍历数字列表
            for(Object str : list ){
                System.out.println("forEach: "+ str);
            }
    
            //通过Iterator 迭代器遍历
            Iterator it=list.iterator();
            while (it.hasNext()){
                String str=(String) it.next();
                System.out.println("迭代器: "+str);
            }
    
            // for循环 ArrayList 查询速度是比较快的, 条件是size
            for(int i=0;i<list.size();i++){
                System.out.println("for循环: "+list.get(i));
            }
    
    
            //Lambda
            list.forEach(str->{
                System.out.print("Lambda: "+str +" ");
            });
            System.out.println("
    ");
    
            System.out.println("--------遍历Set--------");
            //遍历set
            Set set= new HashSet();
            set.add("1点");
            set.add("2点");
            set.add("3点");
    
         //方式一 迭代器 while循环
            Iterator i= set.iterator();
            while(i.hasNext()){
                System.out.println("set 迭代器: "+i.next());
            }
         
         //方式二 for循环
    for (Iterator iter=set.iterator();iter.hasNext();){ System.out.println("for循环迭代: "+iter.next()); } System.out.println("--------遍历Map--------"); //遍历map Map map=new HashMap(); map.put("1","java"); map.put("2","python"); map.put("3","C#"); //第一种方法 (通过keySet)

    Set keys=map.keySet();
    for(Iterator iterator=keys.iterator();iterator.hasNext();){
                //String keyStr=(String) iterator.next();
                System.out.println("map 遍历"+map.get(iterator.next()));
            }
    
            //第二种方式 (通过entrySet)
            Set s1=map.entrySet();
            for(Iterator iter=s1.iterator();iter.hasNext();){
                Entry e=(Entry)iter.next();
                System.out.println("map Entry "+e.getKey()+"----"+ e.getValue());;
            }
    
        }
    
    }

    我们来看下执行结果:

    更多精彩内容,关注后就知道了!

    Story:

  • 相关阅读:
    [网络流24题]飞行员配对方案问题
    学习笔记——线性基
    HDU 4507 吉哥系列故事——恨7不成妻(数位DP求平方和)
    bzoj1415&洛谷P4206 [NOI2005]聪聪与可可
    后缀自动机(模板+例题)
    最小表示法(模板)poj1059
    求次小生成树(洛谷P4180&bzoj1977)
    KMP poj3942
    最小表示法(模板) CH1807
    数位dp 求山峰数(hill)
  • 原文地址:https://www.cnblogs.com/louiezhou/p/12446936.html
Copyright © 2011-2022 走看看