LinkedList基本使用总结

前言

我们都知道 java数据存储重要的四种结构 : 堆栈、队列、数组、链表.

这里拓展一下List集合存储数据的结构:

数据存储的常用结构:堆栈、队列、数组、链表。

1、堆栈:(子弹夹)

先进后出(堆栈的入口、出口都是堆栈的顶端位置);存元素为压栈,取元素为弹栈。

2、队列:(过安检)

先进先出(队列的入口、出口各占一侧)。

3、数组(长度不可变):

查找元素快(通过索引)、增删元素慢(需要创建新的数组)。

4、链表(多个节点之间,通过地址进行连接):

查找元素慢(需要通过连接的节点,一次向后查找)、增删元素快

 

List 这个接口有多个实现类,其中在开发中用的频率最高的 就 ArrayList 和 Linklist.
由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是使用频率最高的.

说下 ArrayList 和 LinkedList 的不同点
java.util.ArrayList
1)集合数据存储的结构是数组结构。
2)元素增删慢,查找快

LinkedList集合的特点: (多用于增删)

  1. 底层是一个链的结构:查询慢,增删快
  2. 里边包含了大量操作首尾元素的方法

1. LinkedList 的概述

LinkedList 实现了Queue接口,能当作队列使用。
LinkedList 实现了List 接口,能对它进行列表操作。
LinkedList 实现了Deque 接口,即能将LinkedList当作双端队列使用。
LinkedList 实现了Cloneable接口,能克隆。
LinkedList 实现了java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。

LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用.
LinkedList的构造函数如下

  1. public LinkedList(): ——生成空的链表
  2. public LinkedList(Collection col): 复制构造函数
    1、获取链表的第一个和最后一个元素 linkList.getFirst() linkList.getLast()

2.常用方法

1.增加元素
public boolean add(E e),链表末尾添加元素,返回是否成功;
public void add(int index, E element),向指定位置插入元素;
public boolean addAll(Collection<? extends E> c),将一个集合的所有元素添加到链表后面,返回是否成功;
public boolean addAll(int index, Collection<? extends E> c),将一个集合的所有元素添加到链表的指定位置后面,返回是否成功;
public void addFirst(E e),添加到第一个元素;
public void addLast(E e),添加到最后一个元素;
public boolean offer(E e),向链表末尾添加元素,返回是否成功;
public boolean offerFirst(E e),头部插入元素,返回是否成功;
public boolean offerLast(E e),尾部插入元素,返回是否成功;

2. 删除元素
public void clear(),清空链表;
public E removeFirst(),删除并返回第一个元素;
public E removeLast(),删除并返回最后一个元素;
public boolean remove(Object o),删除某一元素,返回是否成功;
public E remove(int index),删除指定位置的元素;
public E poll(),删除并返回第一个元素;
public E remove(),删除并返回第一个元素;

3. 查询元素
public boolean contains(Object o),判断是否含有某一元素;
public E get(int index),返回指定位置的元素;
public E getFirst(), 返回第一个元素;
public E getLast(),返回最后一个元素;
public int indexOf(Object o),查找指定元素从前往后第一次出现的索引;
public int lastIndexOf(Object o),查找指定元素最后一次出现的索引;
public E peek(),返回第一个元素;
public E element(),返回第一个元素;
public E peekFirst(),返回头部元素;
public E peekLast(),返回尾部元素;

4 链表实现栈的效果
package com.fl.teslist;

import java.util.LinkedList;

public class TestLinkedList {
    
    
    public static void main(String[] args) {
    
    
        StackL stack = new StackL();
        for (int i = 0; i < 10; i++)
            stack.push(i);
        System.out.println(stack.top());
        System.out.println(stack.top());
        System.out.println(stack.pop());
        System.out.println(stack.pop());
        System.out.println(stack.pop());
    }
}

class StackL {
    
    
    private LinkedList list = new LinkedList();

    public void push(Object v) {
    
    
        list.addFirst(v);
    }

    public Object top() {
    
    
        return list.getFirst();
    }

    public Object pop() {
    
    
        return list.removeFirst();
    }
}
5 链表实现队列的效果
package com.fl.teslist;

import java.util.LinkedList;

public class TestQueue {
    
    
    public static void main(String[] args) {
    
    
        Queue queue = new Queue();
        for (int i = 0; i < 10; i++){
    
    
            queue.put(Integer.toString(i));
            while (!queue.isEmpty())
                System.out.println(queue.get());
        }

    }
}

class Queue {
    
    
    private LinkedList list = new LinkedList();

    public void put(Object v) {
    
    
        list.addFirst(v);
    }

    public Object get() {
    
    
        return list.removeLast();
    }

    public boolean isEmpty() {
    
    
        return list.isEmpty();
    }
}



猜你喜欢

转载自blog.csdn.net/weixin_43975771/article/details/109923787