`
youyu4
  • 浏览: 442094 次
社区版块
存档分类
最新评论

java -- LinkedList

 
阅读更多

java -- LinkedList

 

 

LinkedList是一个简单的数据结构,与ArrayList不同的是,他是基于链表实现的。

 

 

 

优点

 

  • 插入和删除操作比 ArrayList 更加高效
  • LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。
  • 不需要连续的存储空间,只需要有指向上一个节点和下一个节点的标记就好
  • 可以接受各种数据类型
  • LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。

 

 

缺点

 

  • 随机访问的效率比ArrayList差,但是顺序访问还是可以的
  • 非线程安全

 

 

工作原理

 

    LinkedList底层的数据结构是基于双向循环链表的,且头结点中不存放数据,如下:



 

    既然是双向链表,那么必定存在一种数据结构——我们可以称之为节点,节点实例保存业务数据,前一个节点的位置信息和后一个节点位置信息,如下图所示: 



 

 

 

构造方法

 

LinkedList有两种构造方法:

 

  • 第一个构造方法不接受参数,将header实例的previous和next全部指向header实例(注意,这个是一个双向循环链表,如果不是循环链表,空链表的情况应该是header节点的前一节点和后一节点均为null),这样整个链表其实就只有header一个节点,用于表示一个空的链表。 
  • 第二个构造方法接收一个Collection参数c,调用第一个构造方法构造一个空的链表,之后通过addAll将c中的元素全部添加到链表中。

第一种情况如下图:


 

 

// 第一种构造函数
public LinkedList() {    
 header.next = header.previous = header;
 }

// 第二种构造函数
public LinkedList(Collection<? extends E> c) {
     this();
   addAll(c);

 

 

 

 

 

插入、修改、数据存储

 

  • 插入数据add(e),会插入到最尾,修改指针指向的节点就好,如果add(index, e)也是同样的道理,所以也是非常快
  • 修改、查找数据set(index, e), get(index),复杂度是O(n/2),虽然不是O(n),但怎么都比数组要慢。同时,查到某个节点后,可以查前一个和后一个节点。
  • 删除remove(index),与ArrayList比较而言,LinkedList的删除动作不需要“移动”很多数据,从而效率更高。
 
容量调整
      不同于ArrayList,LinkedList不可以在初始化时候指定大小。同样ArrayList有加载因子,在容量不够的时候可以扩容,然而LinkedList容量的说法,每次向其中加入元素时候,容量自动加1。
 
 
并发处理
      与ArrayList类似,面对并发的修改,迭代器很快就会完全失败,而不冒将来不确定的时间任意发生不确定行为的风险。
 
  • 大小: 24 KB
  • 大小: 19.7 KB
  • 大小: 25.8 KB
分享到:
评论

相关推荐

    arraylist-linkedlist-test.zip

    本文件"arraylist-linkedlist-test.zip"主要探讨了在执行添加和删除元素操作时,LinkedList相对于ArrayList的性能优势。 ArrayList是基于动态数组的数据结构,它在内存中连续存储元素。由于数组的特性,访问任意...

    计算机后端-Java-Java核心基础-第24章 集合01 15. LinkedList的源码分析.avi

    计算机后端-Java-Java核心基础-第24章 集合01 15. LinkedList的源码分析.avi

    ArrayList-LinkedList--Vector-Map.zip_vector

    在Java编程语言中,`ArrayList`、`LinkedList`、`Vector`和`Map`是四种常用的集合类,它们各自有着不同的特性和用途。本篇文章将深入探讨这些数据结构及其使用场景。 首先,我们来了解`ArrayList`。`ArrayList`是`...

    关于学习Java-SE的相关代码 Java学习资料

    4. **集合框架**:Java集合框架提供了丰富的数据结构,如ArrayList、LinkedList、HashMap等,用于存储和操作数据。理解这些类的使用及底层原理对于实际开发至关重要。 5. **输入输出流**:Java的IO流系统支持读写...

    ArrayList-LinkedList-源码.rar

    在Java编程中,ArrayList和LinkedList是两种常见的动态数组,它们都是Java集合框架的一部分,提供了对元素存储和操作的功能。本篇将深入探讨ArrayList和LinkedList的内部实现机制,通过源码分析来揭示它们在性能、...

    java-SE-demo Java学习资料 自习资料练习

    集合框架是Java处理数据集合的重要工具,包括List、Set、Map等接口以及ArrayList、LinkedList、HashSet、HashMap等实现类。学习如何根据需求选择合适的集合类型,以及如何使用迭代器、泛型等高级特性,能提升代码的...

    java-study.rar_java教程_site:www.pudn.com

    Java中的类库丰富,例如集合框架(ArrayList、LinkedList、HashMap等)是编程中常用的数据结构,需要熟悉其用法。 在Java SE(标准版)的学习中,会涉及到输入/输出(I/O)流、异常处理、线程、反射和注解等关键...

    java集合-LinkedList的使用

    基于双向链表实现的列表,支持在任意位置的插入和删除操作。

    Java LinkedList Source Code

    非常简单的Java LinkedList 应用实例

    JAVA-API帮助文档(中文版)

    Java API(应用程序接口)是Java编程语言的核心组成部分,它提供了大量的类库,使得开发者能够构建功能丰富的应用程序。这个中文版的“JAVA-API帮助文档”是一个非常宝贵的资源,它包含了Java API的各种经典讲解实例...

    java-面试课程介绍0001

    Java是世界上最流行的编程语言之一,尤其在企业级应用和服务器端开发中占据着主导地位。本面试课程"java-面试课程介绍0001"旨在帮助求职者掌握Java核心技术,以便在面试中脱颖而出。课程涵盖了从基础知识到高级特性...

    21天学会Java--教案

    数组是存储相同类型元素的固定大小的序列,而集合框架则是更灵活的数据结构,如ArrayList、LinkedList、HashSet、HashMap等。学习者将学习如何声明、初始化和操作数组,以及如何使用集合框架处理复杂的数据存储需求...

    java-1-sample

    4. **集合框架**:Java提供了丰富的集合类,如ArrayList、LinkedList、HashMap等,用于存储和操作数据。 5. **输入/输出(I/O)**:Java的I/O流系统支持文件读写、网络通信等,是处理数据交换的关键。 6. **多线程**...

    java---数据结构

    Java中的基本数据结构包括数组(Array)、链表(LinkedList)、栈(Stack)、队列(Queue)等。数组是最基础的结构,它提供了一种按索引访问元素的方法,但插入和删除操作效率较低。链表解决了数组在动态扩展时的...

    core-Java-volume1--example-code.rar_core java 1 code

    此外,集合框架是Java标准库的重要组成部分,包括List、Set、Map等接口以及ArrayList、LinkedList、HashSet、HashMap等实现类。示例代码会解释如何创建和操作这些集合,以及如何使用迭代器和泛型来增强代码的灵活性...

    JAVA--Beginners-to-see.zip_beginners

    同时,学习如何使用Java集合框架,如ArrayList、LinkedList、HashMap等,它们提供了存储和操作数据的有效方式。 对于初学者,理解IO(输入输出)和NIO(非阻塞I/O)也很重要,它们用于读写文件、网络通信等。此外,...

    Java-Mail-list.zip_JAVA list通讯录

    在Java编程领域,"Java-Mail-list.zip_JAVA list通讯录"是一个示例项目,它展示了如何使用Java语言来实现一个基本的通讯录系统。这个项目包含添加联系人、搜索联系人、删除联系人以及查询联系人等核心功能,是学习...

    1-Collections-Overview-Section-Java-Collections-S_overview

    Java集合框架是Java编程语言中的一个核心特性,它为存储、管理和操作对象提供了一组高效且灵活的数据结构。本项目“1-Collections-Overview-Section-Java-Collections-S_overview”着重于概述Java集合框架的基本概念...

    java-collections-framework1016

    ### Java Collections Framework 1016 #### 一、教程概览 本教程由developerWorks提供,旨在深入探讨Java Collections Framework。它不仅适用于初学者,也适合具有一定经验的开发人员。教程从简单的编程示例开始,...

Global site tag (gtag.js) - Google Analytics