Java学习笔记——LinkedList容器

本文详细介绍了Java中的LinkedList容器,探讨了其底层的双向链表结构和结点特点,强调了LinkedList在增删操作上的高效性和查询操作的低效。文章通过比较LinkedList、ArrayList和Vector的适用场景,指导读者在不同需求下选择合适的数据结构。同时,文章还展示了LinkedList在List接口标准使用及非标准使用方式下的具体操作,包括addFirst()、addLast()、getFirst()、getLast()、removeFirst()和removeLast()等方法的实践应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、介绍:

  • LinkedList底层用双向链表实现
  • 特点:查询效率低,增删效率高,线程不安全
1、 LinkedList的存储结构图

在这里插入图片描述

2、 双链表的结点结构
class Node<E>{
	Node<E> previous;  //指向前一个结点
	E data; //结点内保存的数据
	Node<E> nest; //指向后一个结点
}
3、如何选用ArrayList、LinkedList、Vector?

(1)需要线程安全时,用Vector;
(2)不存在线程安全问题时,并且查找较多时用ArrayList(一般使用较多);
(3)不存在线程安全问题时,增加或删除较多用LinkedList。

二、使用:

1、在List标准下的使用

LinkedList实现了List接口,所以LinkedList是具备List的存储特征的(有序、元素可重复

public class LinkedListTest {
    public static void main(String[] args) {
        //实例化 LinkedList容器
        List<String> list = new LinkedList<>();

        //添加元素
        boolean a = list.add("a");
        boolean b = list.add("b");
        boolean c = list.add("c");
        list.add(3,"a"); //在链表的指定位置添加元素
        System.out.println(a+"\t"+b+"\t"+c);

        //获取容器中的所有元素
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i)); //i是指结点在链表中的位置
        }
    }
}

运行结果:
在这里插入图片描述

2、在非List标准下的使用:
方法说明
void addFirst(E)将指定元素插入到开头
void addLast(E)将指定元素插入到结尾
getFirst(E)返回此链表的第一个元素
getLast(E)返回此链表的最后一个元素
removeFirst()移除此链表中的第一个元素,并返回这个元素
removeLast()移除此链表中的最后一个元素,并返回这个元素
pop()从此链表所表示的堆栈处弹出一个元素(等效于removeFirst)
void push(E e)将元素推入此链表多表示的堆栈(等效于addFirst(E ))
(1)测试 addFirst()方法:
public class LinkedListTest2 {
    public static void main(String[] args) {
        //实例化 linkedList容器
        LinkedList<String> list = new LinkedList<>();  //因为要调用的是LinkedList自己的方法,不能用List实例化对象

        //将指定元素插入到开头
        list.addFirst("a");
        list.addFirst("b");
        list.addFirst("c");

        //遍历链表
        for (String str: list) {
            System.out.println(str);
        }
    }
}

在这里插入图片描述

(2)测试 addLast()方法:
public class LinkedListTest2 {
    public static void main(String[] args) {
        //实例化 LinkedList 容器
        LinkedList<String> list1 = new LinkedList<>();
        //将指定元素添加到结尾
        list1.addLast("a");
        list1.addLast("b");
        list1.addLast("c");
        //遍历链表
        for (String str:list1) {
            System.out.print(str+"\t");
        }
    }
}

在这里插入图片描述

(3)测试 getFirst() 和 getLast() 方法:
		//返回此链表的第一个元素
        System.out.println("此链表的第一个元素:"+list1.getFirst());
        //返回此链表的最后一个元素
        System.out.println("此链表的最后一个元素:"+list1.getLast());

在这里插入图片描述

(4)测试 removeFirst() 和 removeLast() 方法:
		//移除此链表中的第一个元素,并返回这个元素
        String s = list1.removeFirst();
        System.out.println(s);
        //移除此链表中的最后一个元素,并返回这个元素
        String s1 = list1.removeLast();
        System.out.println(s1);
        //遍历链表
        System.out.print("剩余链表:");
        for (String str:list1) {
            System.out.print(str+"\t");
        }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值