List集合及List的专有迭代器 day12

package com.shujia.day12;

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
/*
    Collection的子接口:List
        特点:有序且元素可以发生重复的集合,且有索引下标的概念。

 */
/*
    List接口中特有的成员方法:(因为List集合有索引的概念,针对索引的操作多了一些方法)
        void add(int index,E element)       指定位置索引添加元素到集合中
        E remove(int index)                 指定索引删除某个元素,返回被删除的元素
        E get(int index)                    根据索引获取集合中的元素对象
        E set(int index,E element)          指定位置索引,修改元素,返回原本位置上的元素对象
        ListIterator listIterator()         List集合专有的迭代器
      
        迭代器遍历的时候,无法使用集合的方法对集合本身做改动
        List中特有的迭代器中的add方法,不仅可以对迭代器中元素进行添加,底层也针对原集合进行添加元素
       将原集合以及迭代器的版本号也设置成一样的了,所以将来再检查版本号的时候,原集合和迭代器的版本号是一致的
       这样就不会产生并发修改异常了
      ListItr类中有hasPrevious()和previous()方法
      hasPrevious(): 判断前一个位置上是否有元素
      previous(): 将游标向前移动一位,并获取位置上的元素
      ListItr类是继承自Itr类,也拥有hasNext()和next()方法
        
    思考:
        1、使用List集合存储字符串元素,使用迭代器遍历,遍历的时候,如果遇到"java",就向集合中添加一个元素"shujia"
        2、数据结构

 */
public class ListDemo2 {
    public static void main(String[] args) {
        //创建一个List集合对象
        List li1 = new ArrayList();

        //创建元素对象
        Student s1 = new Student("aaa", 12);
        Student s2 = new Student("bbb", 13);
        Student s3 = new Student("ccc", 14);
        Student s4 = new Student("fff", 15);

        //将元素添加到List集合中
        li1.add(s1);
        li1.add(s2);
        li1.add(s3);
        li1.add(s4);
        System.out.println("li1: "+li1);

        System.out.println("=======================================");
        //void add(int index,Object element) 指定位置索引添加元素到集合中
        Student s5 = new Student("qqq", 18);
        //需求:将s5添加在s2和s3之间
        li1.add(2,s5);
        Student s6 = new Student("zzz", 20);
        li1.add(5,s6); // 紧跟着最后一个元素后面的索引可以赋值,其他的索引不行
        System.out.println("li1: "+li1);
//        System.out.println("=======================================");
        //E remove(int index) 指定索引删除某个元素,返回被删除的元素
//        Object o = li1.remove(2);
//        System.out.println("li1: "+li1);
//        System.out.println("o: "+o);
        System.out.println("=======================================");
        //Object get(int index) 根据索引获取集合中的元素对象
        Object o = li1.get(2);
        System.out.println("li1: "+li1);
        System.out.println(o);

        System.out.println("=======================================");
        //Object set(int index,Object element) 指定位置索引,修改元素,返回原本位置上的元素对象
        Student s7 = new Student("www", 31);
        Object o2 = li1.set(2, s7);
        System.out.println("li1: "+li1);
        System.out.println("o2: "+o2);

        System.out.println("=======================================");
        //一个迭代器对象只有一个游标可以移动
        //ListIterator listIterator() List集合专有的迭代器
        //listIterator()通过观察子类源码发现,底层是返回了一个ListItr类的对象
        //ListItr类是继承自Itr类,也拥有hasNext()和next()方法
        ListIterator listIterator = li1.listIterator();
        while (listIterator.hasNext()){
            Object o1 = listIterator.next();
            System.out.println(o1);
        }
        System.out.println("__________________________________________");
        //ListItr类中有hasPrevious()和previous()方法
        //hasPrevious(): 判断前一个位置上是否有元素
        //previous(): 将游标向前移动一位,并获取位置上的元素
        //要想倒着遍历,必选先将迭代器的游标移动到最后一位。
        while (listIterator.hasPrevious()){
            Object o3 = listIterator.previous();
            System.out.println(o3);
        }

    }
}
posted @ 2024-08-09 23:13  ていせい  阅读(2)  评论(0编辑  收藏  举报