Java类集框架-List

List集合

概述

特点

List集合的特有方法

代码实现

List集合子类的特点

ArrayList集合

构造方法和添加方法

ArrayList类常用方法

ArrayList底层原理

LinkList集合

特有功能

代码实现

LinkList源码 

下回分解


List集合

概述

  • 有序集合,这里的有序指的是存取顺序

  • 用户可以精确控制列表中每个元素的插入位置,用户可以通过整数索引访问元素,并搜索列表中的元素

  • 与Set集合不同,列表通常允许重复的元素

特点

  • 存取有序

  • 可以重复

  • 有索引

public class Demo03 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");

        Iterator<String> it = list.iterator();
        while(it.hasNext()){
            String s = it.next();
            System.out.println(s);
        }

        System.out.println("=================");

        for (String str : list) {
            System.out.println(str);
        }
        //aaa
        //bbb
        //ccc
        //=================
        //aaa
        //bbb
        //ccc
    }
}

List集合的特有方法

方法名描述
void add(int index,E element)在此集合中的指定位置插入指定的元素
E remove(int index)删除指定索引处的元素,返回被删除的元素
E set(int index,E element)修改指定索引处的元素,返回被修改的元素
E get(int index)返回指定索引处的元素

 其中这里的remove()方法是下面第一个,与之前所学的不一样,之前是传入一个object对象,这里只是传入位置索引的值。

代码实现

public class Demo03 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");

        // (1)void add(int index,E element)在此集合中的指定位置插入指定的元素
        // 原来index位置上的元素会往后移一个位置
        list.add(0,"qqq");
        System.out.println(list);
        // [qqq, aaa, bbb, ccc]

        // (2)E remove(int index)删除指定索引处的元素,返回被删除的元素
        list.remove(0);
        System.out.println(list);
        // [aaa, bbb, ccc]    恢复原样!

        // (3)E set(int index,E element)修改指定索引处的元素,返回被修改的元素
        list.set(2,"ddd");
        System.out.println(list);
        // [aaa, bbb, ddd]

        // (4)E get(int index)返回指定索引处的元素
        System.out.println(list.get(0));
        //aaa
    }
}

List集合子类的特点

  • ArrayList集合

    底层是数组结构实现,查询、增删

  • LinkedList集合

    底层是链表结构实现,查询、增删

ArrayList集合

List接口的一个实现类。

构造方法和添加方法

public ArrayList()创建一个空的集合对象
public boolean add(E e)将指定的元素追加到此集合的末尾
public void add(int index,E element)在此集合中的指定位置插入指定的元素
ArrayList<String> arrayList = new ArrayList<>();

ArrayList类常用方法

public boolean remove(Object o)删除指定的元素,返回删除是否成功
public E remove(int index)删除指定索引处的元素,返回被删除的元素
public E set(int index,E element)修改指定索引处的元素,返回被修改的元素
public E get(int index)返回指定索引处的元素
public int size()返回集合中的元素的个数

使用方法与上述类似,这里就不做过多的演示!

ArrayList底层原理

底层是数组结构实现,查询、增删

空参构造方法

    public ArrayList() {
        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
    }
    transient Object[] elementData;
    private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

add()方法源码分析

LinkList集合

底层是链表结构实现,查询慢、增删快

特有功能

方法名说明
public void addFirst(E e)在该列表开头插入指定的元素
public void addLast(E e)将指定的元素追加到此列表的末尾
public E getFirst()返回此列表中的第一个元素
public E getLast()返回此列表中的最后一个元素
public E removeFirst()从此列表中删除并返回第一个元素
public E removeLast()从此列表中删除并返回最后一个元素

代码实现

public class Demo03 {
    public static void main(String[] args) {
        LinkedList<String> list = new LinkedList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        //(1)public void addFirst(E e)	在该列表开头插入指定的元素
        list.addFirst("first");
        System.out.println(list);
        //[first, aaa, bbb, ccc]
        
        //(2)public void addLast(E e)	将指定的元素追加到此列表的末尾
        list.addLast("last");
        System.out.println(list);
        //[first, aaa, bbb, ccc, last]

        //(3)public E getFirst()	返回此列表中的第一个元素
        System.out.println(list.getFirst());
        //first
        
        //(4)public E getLast()	返回此列表中的最后一个元素
        System.out.println(list.getLast());
        //last
        
        //(5)public E removeFirst()	从此列表中删除并返回第一个元素
        list.removeFirst();
        System.out.println(list);
        //[aaa, bbb, ccc, last]
        
        //(6)public E removeLast()	从此列表中删除并返回最后一个元素
        list.removeLast();
        System.out.println(list);
        //[aaa, bbb, ccc]
    }
}

LinkList源码 

LinikList是双向链表结构的

在LinkList里面有一个内部类

    private static class Node<E> {
        E item;
        Node<E> next;
        Node<E> prev;

        Node(Node<E> prev, E element, Node<E> next) {
            this.item = element;
            this.next = next;
            this.prev = prev;
        }
    }

 在Java中,链表的基本实现已经被封装起来了,不像C/C++那样增删查改的逻辑都要自己写。

下回分解

Java类集框架-Seticon-default.png?t=M0H8https://blog.csdn.net/weixin_43715214/article/details/122787661

posted @ 2022-02-04 01:51  金鳞踏雨  阅读(7)  评论(0编辑  收藏  举报  来源