集合(3):Collection下的子接口:List接口

集合(3):Collection下的子接口:List接口

一、List接口的概述

(1)有序集合(有序指的是存储和取出的顺序一致)
(2)允许重复的元素
(3)此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素 

创建List集合对象,使用接口多态的形式创建(ArrayList是List可实例化的一个子类)

public class ListDemo1 {
    public static void main(String[] args) {
        //创建List集合对象,使用接口多态的形式创建
        List list = new ArrayList();
		//添加元素到集合里
        list.add("hello");
        list.add("world");
        list.add("java");
        list.add("bigdata");
		//调用迭代器
        Iterator iterator = list.iterator();
		//使用while循环遍历集合中的暗元素
        while (iterator.hasNext()) {
            Object next = iterator.next();
            //向下转型 
            String s = (String) next;
            System.out.println(s + ",长度为:" + s.length());
        }
    }
}

二、List接口特有的功能

1、因为List集合拥有下标索引,所以根据这个下标索引衍生出特有方法

(1)添加功能:
        void add(int index,Object element)
            将指定的元素插入此列表中的指定位置
(2)删除功能:
        Object remove(int index)
            删除该列表中指定位置的元素
(3)获取功能:
        Object get(int index)
            返回此列表中指定位置的元素
(4)修改功能:
        Object set(int index,Object element)
            用指定的元素替换此列表中指定位置的元素
(5)List特有迭代器:
        ListIterator<E> listIterator()
            返回列表中的列表迭代器(按适当的顺序)
public class ListDemo2 {
    public static void main(String[] args) {
        //创建List集合对象
        List list = new ArrayList();

        //添加元素到集合中
        list.add("hello");
        list.add("world");
        list.add("java");
        list.add("hadoop");
        System.out.println(list);//[hello, world, java, hadoop]
        System.out.println("===============================");

        //void add(int index,Object element)
        //将指定的元素插入此列表中的指定位置
        //如果指数超出范围( index < 0 || index > size() ),size代表元素的个数
        list.add(0, "hive");
        System.out.println(list);//[hive, hello, world, java, hadoop]
        list.add(5, "spark");
        System.out.println(list);//[hive, hello, world, java, hadoop, spark]

        //Object remove(int index)
        //删除该列表中指定位置的元素
        //返回被删除的元素,类型为Object类型
        Object obj = list.remove(0);
        System.out.println(obj);//hive
        System.out.println(list);//[hello, world, java, hadoop, spark]

        //Object get(int index)
        //获取此列表中指定位置的元素
        //原集合中的元素不变
        Object obj2 = list.get(3);
        System.out.println(obj2);//hadoop
        System.out.println(list);//[hello, world, java, hadoop, spark]

        //Object set(int index,Object element)
        //用指定的元素(可选操作)替换此列表中指定位置的元素。
        //返回的是指定位置被替换的元素
        Object obj3 = list.set(3, "flink");
        System.out.println(obj3);//hadoop
        System.out.println(list);//[hello, world, java, flink, spark]

        //获取List迭代器对象,遍历
        Iterator iterator = list.iterator();
        while (iterator.hasNext()) {
            String s = (String) iterator.next();
            System.out.println(s + ",长度为:" + s.length());
            /*
                hello,长度为:5
                world,长度为:5
                java,长度为:4
                flink,长度为:5
                spark,长度为:5
             */
        }
    }
}

2、List集合特有的迭代器

(1)ListIterator extends Iterator
        由于继承自Iterator接口,所以内部一定也有hasNext()方法和next()方法

(2)获取功能:Object previous():返回列表中的上一个元素,并向后移动光标位置
    (当指针指向某一位置,调用该方法,指针就会指向上一位置)
        可以反复调用此方法以向后方遍历列表,或者与调用next()进行混合来回。
        (请注意,对next和previous交替调用将next返回相同的元素。)
        1、该方法是倒着遍历迭代器
        2、该方法的获取元素指针与next()获取元素指针是同一个

(3)判断功能:boolean hasPrevious():判断上一个有没有元素

    注意:
        要想倒着遍历,必须先正着遍历一遍。在开发中很少使用,面试中经常遇到

案例:

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class ListIteratorDemo1 {
    public static void main(String[] args) {
        //创建集合对象
        List list = new ArrayList();

        //添加元素
        list.add("hello");
        list.add("world");
        list.add("java");
        list.add("hadoop");

        //获取List迭代器对象   list.listIterator().var
        ListIterator listIterator = list.listIterator();

        /*
        像之前一样遍历是错误的,因为previous()方法是倒着遍历的
        但是指针一开始是在第一个位置前面
        我们需要将指针移动到最后一个元素的位置后面
        错误案例:
          while (listIterator.hasPrevious()) {
            Object previous = listIterator.previous();
            String s = (String) previous;
            System.out.println(s + ",长度为:" + s.length());
        }
         */

        //先将指针移动到最后一个元素的位置后面
        //先正着遍历一遍,使用hasNext()判断
        while (listIterator.hasNext()){
            //获取集合中的下一个元素
            Object next = listIterator.next();
            //向下转型
            String s = (String) next;
            System.out.println(s + ",长度为:" + s.length());
        }

        //然后再倒着遍历,使用hasPrevious()判断
        while (listIterator.hasPrevious()){
            //获取集合中的上一个元素
            Object previous = listIterator.previous();
            //向下转型
            String s = (String) previous;
            System.out.println(s + ",长度为:" + s.length());
        }
    }
}

3、List集合特有的遍历方式(仅限于List集合)

size()方法和get()方法的结合使用
     size()方法:获取集合的长度
     get()方法:获取结合的元素

遍历List集合元素

import java.util.ArrayList;
import java.util.List;

public class ListDemo3 {
    public static void main(String[] args) {
        //创建集合对象
        List list = new ArrayList();

        //向集合中添加元素
        list.add("hello");
        list.add("world");
        list.add("java");
        list.add("bigdata");

        //size()方法和get()方法的结合使用
        for (int i = 0; i < list.size(); i++) {
            Object obj = list.get(i);

            //向下转型
            String s = (String) obj;
            System.out.println(s + ",长度为:" + s.length());
        }
    }
}
                执行结果如下:
                            hello,长度为:5
                            world,长度为:5
                            java,长度为:4
                            hadoop,长度为:6
                            hadoop,长度为:6
                            java,长度为:4
                            world,长度为:5
                            hello,长度为:5

                            Process finished with exit code 0

遍历学生对象信息

import java.util.ArrayList;
import java.util.List;

public class ListDemo4 {
    public static void main(String[] args) {
        //创建集合对象
        List list = new ArrayList();

        //创建学生对象
        Student s1 = new Student("王力宏", 45);
        Student s2 = new Student("李元浩", 22);
        Student s3 = new Student("智勋", 24);
        Student s4 = new Student("呆妹", 22);
        Student s5 = new Student("乌兹", 21);

        //将学生对象添加到集合中
        list.add(s1);
        list.add(s2);
        list.add(s3);
        list.add(s4);
        list.add(s5);

        //使用size()和get()方法遍历
        for (int i = 0; i < list.size(); i++) {
            Student student = (Student) list.get(i);
            System.out.println(student.getName() + "---" + student.getAge());
        }
    }
}
上一篇:Collection接口下的集合


下一篇:Spring Boot UnsatisfiedDependencyException Error creating bean with name 异常