• 迭代器Iterator接口


      1 package day2_18;
      2 
      3 import org.junit.Test;
      4 
      5 import java.util.ArrayList;
      6 import java.util.Collection;
      7 import java.util.Iterator;
      8 
      9 /**
     10  *
     11     集合元素的遍历操作:使用迭代器Iterator接口
     12     1.内部的方法:hasNext() 和 next()
     13     2.集合对象每次调用iterator(),都会得到一个新的迭代器对象,
     14     默认游标都在集合的第一个元素之前
     15 
     16     3.迭代器的默认方法remove():删除集合元素。
     17     注意:> 它是遍历过程中通过迭代对象的remove()删除集合中的元素,不是集合对象的remove();
     18           > 如果还未调用next(),此时指针没有指向任何元素,就调用remove(),报错IllegalStateException
     19             如果调用next()后,调用remove(),已经将指针指向的元素删除了,再调用remove(),就会报错IllegalStateException
     20 
     21 
     22  *
     23  * @Author Tianhao
     24  * @create 2021-02-18-15:47
     25  */
     26 public class IteratorTest {
     27     @Test
     28     public void test() {
     29         Collection coll = new ArrayList();
     30         coll.add(123);
     31         coll.add(456);
     32         coll.add(false);
     33         coll.add(new String("Tom"));
     34         coll.add(new Person("张三", 23));
     35 
     36         //遍历操作
     37         //推荐方式一:
     38         //此时iterator指针在集合第一个元素的上面
     39 //        Iterator iterator = coll.iterator();
     40 //        //hasNext():判断iterator指针下面的元素是否存在
     41 //        while (iterator.hasNext()) {
     42 //            //存在,next():①指针下移 ②将指针指向的元素返回
     43 //            System.out.println(iterator.next());
     44 //        }
     45 
     46         //推荐方式二:foreach   ---> jdk5新增,用于遍历集合和数组
     47         //底层仍然调用的是迭代器
     48         for (Object obj : coll) {
     49             System.out.println(obj);
     50         }
     51 
     52     }
     53 
     54     @Test
     55     public void test2() {
     56         Collection coll = new ArrayList();
     57         coll.add(123);
     58         coll.add(456);
     59         coll.add(false);
     60         coll.add(new String("Tom"));
     61         coll.add(new Person("张三", 23));
     62 
     63         //错误迭代方式一
     64 //        Iterator iterator = coll.iterator();
     65 //        while (iterator.next() != null) {
     66 //            System.out.println(iterator.next());
     67 //        }
     68 
     69         //错误迭代方式二
     70         //死循环:不停的输出第一个元素 123
     71         while (coll.iterator().hasNext()) {
     72             System.out.println(coll.iterator().next());
     73         }
     74 
     75     }
     76 
     77 
     78     @Test
     79     public void test3() {
     80         Collection coll = new ArrayList();
     81         coll.add(123);
     82         coll.add(456);
     83         coll.add(false);
     84         coll.add(new String("Tom"));
     85         coll.add(new Person("张三", 23));
     86 
     87         Iterator iterator = coll.iterator();
     88         while (iterator.hasNext()) {
     89             //还未调用next(),此时指针没有指向任何元素,就调用remove(),报错IllegalStateException
     90             //iterator.remove();
     91             Object next = iterator.next();
     92             //如果指针指向的元素和 "Tom"内容相同
     93             if ("Tom".equals(next)) {
     94                 //删除指针指向的元素
     95                 iterator.remove();
     96                 //调用next()后,调用remove(),再调用remove(),就会报错IllegalStateException
     97                 //iterator.remove();
     98             }
     99         }
    100 
    101         //因为上面的iterator迭代器已经指向了集合元素的最后位置
    102         // 所以再遍历集合元素,需要重新创建一个新的迭代器
    103         iterator = coll.iterator();
    104         while (iterator.hasNext()) {
    105             System.out.println(iterator.next());
    106         }
    107     }
    108 
    109     @Test
    110     public void test4() {
    111         String[] arr = new String[]{"MM","MM","MM"};
    112 
    113         //方式一:普通for循环遍历
    114 //        for (int i = 0; i < arr.length; i++) {
    115 //            arr[i] = "GG";//改变arr数组
    116 //        }
    117 
    118         //方式二:foreach循环遍历
    119         for (String s : arr) {
    120             s = "GG";//不会改变arr数组
    121         }
    122 
    123         for (int i = 0; i < arr.length; i++) {
    124             System.out.println(arr[i]);
    125         }
    126     }
    127 
    128 }
  • 相关阅读:
    CopyOnWriteArrayList设计思路与源码分析
    点击页面按钮以excel保存到本地
    上传图片
    关于重复点击的
    去首尾空格还有换行问题//把数字换位大写字母//向后台传输数据
    判断输入的时间与当前的时间(判断时间是今天还是以前的)
    前端的一些小技巧
    git 操作大全
    移动web开发常见问题解决方案
    响应式布局
  • 原文地址:https://www.cnblogs.com/zui-ai-java/p/14422796.html
Copyright © 2020-2023  润新知