List集合

概述

List是一个有序的Collection(List是Collection的子接口),使用此接口能够精确的控制每个元素插入的位置,能够通过索引(类似于数组的下标)来访问List中的元素,第一个元素的索引为 0,而且允许有相同的元素。

List 接口存储一组可重复、有序(插入顺序)的对象。

特点

  1. 元素有下标,可以通过下标访问元素
  2. 元素是有序的(存入集合的顺序和取出的顺序一定相同)
  3. 元素可以重复(包括null)

List方法测试

ListDemo
package collection;

import com.sun.org.apache.xpath.internal.SourceTree;

import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

/**
 * @author少珩
 * @data 2022/3/23 21:12
 * java.util.List接口
 * List继承自Collection接口,是最常用的一类集合,
 * 特点:可以存放重复的元素
 * List提供了一套通过下标操作元素的方法
 * 常用实现类:
 * java.util.ArrayList:内部使用的是数组,查询性能很好
 * java.util.LinkedList:内部使用的是链表,增删性能很好
 * 对性能要求不是特别苛刻的情况下,通常使用ArrayList
 */
public class ListDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        //List<String> list = new LinkedList<>();
        list.add("one");
        list.add("two");
        list.add("three");
        list.add("four");
        list.add("five");
        System.out.println(list);
        //获取集合中的第三个元素
        String str = list.get(2);//与数组获取元素的功能一致 String str = arr[2];
        System.out.println(str);
        //list使用传统for循环遍历集合
        for(int i=0;i<list.size();i++){
            System.out.println(list.get(i));
        }
        /*
        * E set(int index,E e)
        * 将给定的元素e设置到指定的位置index上,返回值为该位置原来的元素
        * 替换元素的操作
        * */
        String old = list.set(1, "six");//返回第二个位置原有的内容two
        System.out.println(old);//two
        System.out.println(list);//[one, six, three, four, five]
        //在不创建新的集合的前提下,将集合元素翻转
        /*
        * 正数   倒数
        *  0     4 = 4-i
        *  1     3 = 4-1
        *  2     2 = 4-2
        * 此处的4可以通过list.size-1获取
        * */
        for(int i=0; i<list.size()/2;i++){//i:0
            //获取正数位置上的元素
            //String e = list.get(i);//one
            //将获取到的正数的位置放置到倒数的位置
            //e = list.set(list.size()-1-i,e);//five
            //将倒数的元素设置正数的位置
            //list.set(i, e);
            list.set(i,list.set(list.size()-1-i,list.get(i)));
        }
        System.out.println(list);
        //翻转集合 Collections是集合专用的工具类
        Collections.reverse(list);
        System.out.println(list);
    }
}
ListDemo2
package collection;

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

/**
 * List重载了add,remove方法
 */
public class ListDemo2 {
    public static void main(String[] args) {
        List<String> list = new ArrayList();
        list.add("one");
        list.add("two");
        list.add("three");
        list.add("four");
        list.add("five");
        //[one, two, three, four, five]
        System.out.println(list);
        /*
        * void add(int index,E e);
        * 将给定的元素e插入到指定的位置i处
        * */
        list.add(3,"six");
        //[one, two, three, six, four, five]
        System.out.println(list);
        /*
        * E remove(int index);
        * 删除指定下标位置i的元素,并将删除元素返回
        * */
        String old = list.remove(2);
        System.out.println(old);
        //[one, two, six, four, five]
        System.out.println(list);
    }
}
ListDemo3
package collection;

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

/**
 * List subList(int start,int end)
 * 获取当前集合中指定范围内的子集
 */
public class ListDemo3 {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        for(int i=0;i<10;i++){
            list.add(i);
        }
        //[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
        System.out.println(list);
        //获取集合的子集[3-7]
        //指定的范围参数,含头不含尾
        List<Integer> subList = list.subList(3, 8);
        //[3, 4, 5, 6, 7]
        System.out.println(subList);
        //将子集的元素都扩大十倍
        for(int i = 0;i<subList.size();i++){
            subList.set(i, subList.get(i)*10);
        }
        //subList:[30, 40, 50, 60, 70]
        System.out.println("subList:"+subList);
        /*
        * 对子集的元素的操作,就是对原集合的操作
        * */
        //list:[0, 1, 2, 30, 40, 50, 60, 70, 8, 9]
        System.out.println("list:"+list);
        //清除集合中1-8这部分的元素
        list.subList(1, 9).clear();
        //[0, 9]
        System.out.println(list);
    }
}