学习笔记---Java中的集合框架:LinkedList

Java LinkedList

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

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

  • 一个单向链表包含两个值,当前节点的值和一个指向下一个节点的链接

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wj0iPcqT-1612186975641)(D:\notes\java\java LinkedList.assets\image-20210201180339848.png)]

  • 一个双向链表有三个整数值:数值、向后的节点链接、向前的节点链接

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HUvtvsPQ-1612186975644)(D:\notes\java\java LinkedList.assets\image-20210201180410780.png)]

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

使用情况:ArrayList:

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

使用情况:LinkedList:

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

LinkeList 继承了 AbstractSequentiaList 类

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZqsDaKQc-1612186975645)(D:\notes\java\java LinkedList.assets\image-20210201211910550.png)]

在 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
    
  2. 通过 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
    

更多常用 API 方法可以参考文档:https://www.matools.com/api/java8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值