Java LinkedList

链表(LinkedList)是一种常见的基础数据结构,是一种线性表,但是并不是会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。

链表可以分为单向链表和双向链表:

  • 一个单向链表包含两个值,当前节点的值和一个指向下一个节点的链接
  • 一个双向链表有三个整数值:数值、向后的节点链接、向前的节点链接

与 ArrayList 相似,是一种常用的数据容器。相比:LinkedList 的增加和删除对操作效率更高,而查找和删除的操作效率较低。

使用情况:ArrayList:

  • 频繁访问列表中的某一个元素
  • 只需要在列表末尾进行添加和删除元素操作

使用情况:LinkedList:

  • 需要通过循环迭代来访问列表中的某些元素
  • 需要频繁的在列表开头、中间、末尾等位置进行添加或删除元素操作

LinkeList 继承了 AbstractSequentiaList 类

实现了 Queue 接口,可以作为队列使用;实现了 List 接口,可以进行列表的相关操作;实现了 Deque 接口,可以作为队列使用;实现了 Cloneable 接口,可以实现克隆;实现了 java.io.Serializable 接口,支持序列化,能够通过序列化传输;

Javalinkedlist为什么是有序的 在java中,linkedlist_System

在 java.util.LinkedList 包中

  • LinkedList list = new LinkedList(); //创建方法
  • LinkedList list = new LinkedList(Collection<? extends E> c); // 使用集合创建链表

1. 创建一个简单链表实例

public class Test {
    public static void main(String[] args) {
        LinkedList<String> list = new LinkedList<String>();
        System.out.println(list);
    }
}

运行结果:
    []

2. 添加元素 addFirst(),addLast()

public class Test {
    public static void main(String[] args) {
        LinkedList<String> list = new LinkedList<String>();
        list.add("two");	//添加一个元素
        list.addFirst("one");		//在头部添加元素
        list.addLast("three");		//在尾部添加元素
        System.out.println(list);
    }
}

运行结果:
    [one, two, three]

3. 移除元素 removeFirst(),removeLast()

public class Test {
    public static void main(String[] args) {
        LinkedList<String> list = new LinkedList<String>();
        list.add("two");
        list.addFirst("one");
        list.addLast("three");
        list.remove(1);     //移除一个元素
        list.removeFirst();     //移除头部元素
        list.removeLast();      //移除尾部元素
        System.out.println(list);
    }
}

运行结果:
    []

4. 获取元素 getFirst(),getLast()

public class Test {
    public static void main(String[] args) {
        LinkedList<String> list = new LinkedList<String>();
        list.add("two");
        list.addFirst("one");
        list.addLast("three");
        //根据下标得到值输出
        System.out.println(list.get(1));
        //得到头部元素
        System.out.println(list.getFirst());
        //得到尾部元素
        System.out.println(list.getLast());
    }
}

运行结果:
    two
	one
	three

5. 迭代元素

  1. 使用 for 和 size()
public class Test {
    public static void main(String[] args) {
        LinkedList<String> list = new LinkedList<String>();
        list.add("two");
        list.addFirst("one");
        list.addLast("three");
        //通过 size() 方法计算链表大小
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }
}

运行结果:
	one
	two
	three
  1. 通过 fro-each
public class Test {
    public static void main(String[] args) {
        LinkedList<String> list = new LinkedList<String>();
        list.add("two");
        list.addFirst("one");
        list.addLast("three");
        for (String s : list) {
            System.out.println(s);
        }
    }
}

运行结果:
	one
	two
	three