集合(Collection ArrayList LinkedList 泛型) 3

List集合

java.util.List 接口,继承 Collection 接口,有序的 collection (也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。与 Set 接口不同,List接口通常允许重复元素。
list接口特点:
  • List集合是有序的集合,存储和取出的顺序一致
  • List集合允许存储重复的元素
  • List集合中的每个元素具有索引

提示:集合类名后缀是List,列如ArrayList,LinkedList等,都是List接口实现类,都具有List接口的特点。

List接口特有的方法(带有索引)

  • public void add(int index,E element) 在列表的指定位置上插入元素。
  • public E get(int index) 返回列表中指定位置的元素。
  • public E set(int index,E element) 用指定元素替换列表中指定位置的元素,并返回替换前的元素。
  • public E remove(int index) 移除列表中指定位置的元素,并返回被移除之前的元素。

ArrayList集合

java.util.ArrayList 集合数据存储的结构是数组结构。元素增删慢,查找快,线程不安全,运行速度快。由于日常开发中使用最多的功能为查询数据、遍历数据,所以 ArrayList 是最常用的集合。许多程序员开发时非常随意地使用 ArrayList 完成任何需求,并不严谨,这种用法是不提倡的。
ArrayList 源代码分析
底层是Object对象数组,数组存储的数据类型是Object,数组名字为elelmentData.(可以分析出ArrayList是数据结构集合)
transient Object[] elementData;

LinkedList集合

java.util.LinkedList 集合数据存储的结构是链表结构。方便元素添加、删除的集合。

集合特点:元素增删快,查找慢,线程不安全,运行速度快。

LinkedList是一个双向链表,图解如下:

       

ListedList集合特有方法

实际开发中对一个集合的添加与删除经常涉及首位操作,而LinkedList提供了大量首位操作的方法。

public void addFirst(E e) : 将指定元素插入此列表的开头。
public void addLast(E e) : 将指定元素添加到此列表的结尾。
public E getFirst() : 返回此列表的第一个元素。
public E getLast() : 返回此列表的最后一个元素。
public E removeFirst() : 移除并返回此列表的第一个元素。
public E removeLast() : 移除并返回此列表的最后一个元素。
public E pop() : 从此列表所表示的堆栈处弹出一个元素。
public void push(E e) : 将元素推入此列表所表示的堆栈。
public boolean isEmpty() :如果列表不包含元素,则返回 true
解析:成员变量size是长度,记录了集合中存储元素的个数。first和last分别表示链表开头和结尾的元素。
 
LinkedList内部类Node类分析:(可以分析出LinkedList是双链表集合)
private static class Node<E>{
    E item;
    Node<E> next;
    Node<E> prev;

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

解析:LinkedList集合中的内部类Node,表示链表中节点对象,Node类具有3个成员变量:

  • item :存储的对象
  • next : 下一个节点
  • prev : 上一个节点

从Node类的源代码中分析出来,LinkedList是双向链表,一个对象,他记录了上一个节点,也记录了下一个节点。

猜你喜欢

转载自blog.csdn.net/weixin_40959890/article/details/107252917