List接口

List接口

特点:有序、有下标、可重复

方法

除了继承Collection接口的方法,List还有自己的方法
List的方法相比Collection添加了下标相关的方法,添加、删除、获取下标、获取数据、列表迭代器等

void add(int index, Object o) //在index位置插入对象
boolean addAll(int index, Collection c) //将一个集合中的元素添加到此集合中的index位置
Object get(int index) // 返回集合中指定的位置的元素
List subList(int fromIndex, int toIndex) // 返回fromIndex到toIndex之间的元素集合
int indexOf(Object o) // 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1
ListIterator<E> listIterator() // 返回列表中的列表迭代器(按适当的顺序) 
ListIterator<E> listIterator(int index) // 从列表中的指定位置开始,返回列表中的元素(按正确顺序)的列表迭代器
E remove(int index) // 删除该列表中指定位置的元素(可选操作)。  

实践

Demo1

package com.qianfeng;

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

/**
 * List添加、删除、遍历、判断和获取
 *
 * @since 2022-05-06
 */
public class ListDemo {
    public static void main(String[] args) {
        List li = new ArrayList<>();
        // 添加元素
        li.add("苹果");
        li.add("三星");
        li.add("小米");
        li.add("华为");

        // 删除元素
//        li.remove("三星");
        li.remove(0);

        // 遍历
        // 由于List继承于Collection,所以可以使用增强for循环遍历
        System.out.println("===============使用增强for循环遍历==================");
        for (Object o : li) {
            System.out.println(o.toString());
        }

        // 由于List有下标,所以可以使用for循环遍历
        System.out.println("===============使用for循环遍历==================");
        for (int i = 0; i < li.size(); i++) {
            System.out.println(li.get(i));
        }

        // 由于List继承于Collection,所以可以使用迭代器遍历
        System.out.println("===============使用迭代器遍历==================");
        Iterator it = li.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }

        // List有列表迭代器,可以实现双向遍历、添加、删除、更新等操作
        System.out.println("===============使用列表迭代器遍历==================");
        ListIterator lit = li.listIterator();
        while (lit.hasNext()) {
            System.out.println(lit.nextIndex() + ":" + lit.next());
        }

        while (lit.hasPrevious()) {
            System.out.println(lit.previousIndex() + ":" + lit.previous());
        }

        // 判断
        System.out.println(li.contains("索尼"));
        System.out.println(li.isEmpty());
        // 获取
        System.out.println(li.indexOf("华为"));
    }
}

Demo2 数值列表

package com.qianfeng;

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

/**
 * 数值List添加删除
 *
 * @since 2022-05-06
 */
public class ListDemo2 {
    public static void main(String[] args) {
        List list = new ArrayList<>();

        // 添加元素
        list.add(10);
        list.add(180);
        list.add(20);
        list.add(30);
        System.out.println(list);

        // 删除元素
//        list.remove(0);
        // 这里直接删除180会报错,可采用如下两种方式,可以采用new的原因是remove中有一个equals的比较,Integer的equals方法就是比较值
        list.remove(new Integer(180));
//        list.remove(list.indexOf(180));
        System.out.println(list);

        // 取子列表,左闭右开
        System.out.println(list.subList(1, 3));
    }
}

List实现类

ArrayList
底层是数组,查询快,增删慢
JDK1.2版本出现,运行效率高,线程不安全

Vector
底层是数组,查询快,增删慢
JDK1.0出现,运行效率低,线程安全

LinkedList
底层是链表,增删快,查询慢

posted @   Oh,mydream!  阅读(47)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示