• java基础29 迭代器 listIterator() 及各种遍历集合的方法


    listIterator() 迭代器包含了 Iterator() 迭代器中的所有方法。

    1、ListIterator的常用方法

        hasPrevious() :判断是否还有上一个元素,有则返回true  (反向遍历)
        previous() :返回列表中的上一个元素,并向后(上)移动光标位置
        next() :返回列表中的下一个元素,并且前进光标位置
        hasNext() :判断是否还有下一个元素,有则返回true  (正向遍历)
        set(E e) :指定元素替换由 next()previous()返回的最后一个元素
        add(E e):将指定的元素插入列表的末尾

    实例

     1 package com.dhb.collection;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 import java.util.ListIterator;
     6 
     7 /**
     8  * @author DSHORE / 2018-5-16
     9  * ListIterator是一个接口
    10  */
    11 public class Demo5 {
    12     public static void main(String[] args) {
    13         List<String> list=new ArrayList<String>();
    14         list.add("狗娃");
    15         list.add("晶晶");
    16         list.add("亮亮");
    17         list.add("美美");
    18         list.add("铁蛋");
    19         
    20         ListIterator<String> it=list.listIterator();//返回一个list接口中的特有迭代器
    21         System.out.println("获取下一个元素:"+it.next()); //返回值:狗娃
    22         System.out.println("是否有上一个元素:"+it.hasPrevious()); //返回值:true
    23         System.out.println("获取上一个元素:"+it.previous()); //返回值:狗娃
    24         while(it.hasNext()){//正序遍历     hasNext():判断集合中是否还有下一个元素
    25             System.out.print(it.next()+",");//返回值:狗娃,晶晶,亮亮,美美,铁蛋,
    26         }
    27         
    28         while(it.hasPrevious()){//反序遍历       hasPrevious():判断集合中是否还有上一个元素
    29             System.out.println(it.previous());
    30         }
    31         it.next();
    32         it.next();//下移了两位
    33         it.set("张三");//把晶晶替换成张三了
    34         System.out.println("集合的元素:"+list);//返回值:[狗娃, 张三, 亮亮, 美美, 铁蛋]
    35     }
    36 }

    2、迭代器在遍历元素时需要注意的事项

      2.1、在迭代元素的过程中,不允许使用集合对象改变集合中元素的个数.

      2.2、如果需要添加或者删除,只能使用迭代器里面的方法进行操作.

      2.3、如果使用了集合对象改变了集合中元素的个数,那么就会报:ConcurrentModificationException异常

    实例

     1 package com.dhb.collection;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 import java.util.ListIterator;
     6 
     7 /**
     8  * @author DSHORE / 2018-5-16
     9  *
    10  */
    11 public class Demo7 {
    12 
    13     public static void main(String[] args) {
    14         List<String> list=new ArrayList<String>();
    15         list.add("张三");
    16         list.add("李四");
    17         list.add("铁蛋");
    18         
    19         ListIterator<String> it=list.listIterator();
    20         while(it.hasNext()){
    21             System.out.print(it.next()+",");//返回结果:张三,李四,铁蛋,
    22             it.add("二狗子"); //it是ListIterator迭代器的对象,所以不会报异常
    23             //list.add("二狗子");//报异常:ConcurrentModificationException异常
    24         }
    25         System.out.println(list);//返回结果:[张三, 二狗子, 李四, 二狗子, 铁蛋, 二狗子]    while循环了三次,故有三个二狗子
    26     }
    27 }

    3、用三种方式遍历集合中的元素

        第一种:for循环遍历(get方法)
        第二种:增强for循环遍历
        第三种:使用迭代器正序遍历
        第四种:使用迭代器逆序遍历

     1 package com.dhb.collection;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 import java.util.ListIterator;
     6 
     7 /**
     8  * @author DSHORE / 2018-5-16
     9  *
    10  */
    11 public class Demo6 {
    12     public static void main(String[] args) {
    13         List<String> list=new ArrayList<String>();
    14         list.add("张三");
    15         list.add("李四");
    16         list.add("王五");
    17         
    18         System.out.println("=============for循环遍历(get方法)=============");
    19         for (int i = 0; i < list.size(); i++) {
    20             System.out.println(list.get(i));
    21         }
    22     
    23 System.out.println("=============增强for循环遍历=============");
    24 for (String s:list){
    25   System.out.println(s);
    26 }
    27 28 System.out.println("============使用迭代器正序遍历============"); 29 ListIterator<String> it=list.listIterator(); 30 while(it.hasNext()){ 31 System.out.println(it.next()); 32 } 33 34 System.out.println("============使用迭代器逆序遍历============"); 35 while(it.hasPrevious()){ 36 System.out.println(it.previous()); 37 } 38 } 39 }

     运行结果图

    原创作者:DSHORE

    作者主页:http://www.cnblogs.com/dshore123/

    原文出自:http://www.cnblogs.com/dshore123/p/9047060.html

    欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐或评论,谢谢!

  • 相关阅读:
    TCP和UDP的一些区别: TCP提供可靠传输的机制:
    rpc和 http的区别
    熔断原理与实现Golang版
    源码解读 Golang 的 sync.Map 实现原理
    mysql底层为啥用b 树不用红黑树_MySQL索引底层数据结构
    一条sql 查询语句是如何执行的
    网络相关知识
    为什么遍历 Go map 是无序的?
    Go语言 参数传递究竟是值传递还是引用传递的问题分析
    解决goland debug 调试问题 Version of Delve is too old for this version of Go
  • 原文地址:https://www.cnblogs.com/dshore123/p/9047060.html
Copyright © 2020-2023  润新知