Java 之 List 接口的实现:LinkedList

时间:2022-11-08 20:08:21

Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap

隶属于队列List<T>接口下的LinkedList是Java 自实现类的。

如果对应到数据结构中,LinkedList 的样子其实就是一个双链表(其实可以理解为环形双向链表),所以很多东西(LinkedList的优劣)其实我们可以推倒出来,,这个我会在后期写一份博文专门比较ArrayList。

首先我们来看LinkedList 的数据结构

Java   之 List<T> 接口的实现:LinkedList

如图有一个Header的结点  用来保存List的头部      同时  Header的pre 指向  整个List 的最后一个Node,而最后一个Node的Next指向header。

LinkedList 有两个构造函数:

无参数的:直接构造一个只含有header  Node的空队列

有参数的:接收一个Collection参数collection,调用第一个构造方法构造一个空的链表,之后通过addAll将collection中的元素全部添加到链表中。

一些常用API 如下

(一)增

(1)public boolean add(Object element) 直接添加到队列末尾
(2)public boolean add(int index, Object element) 根据索引添加

---用作栈时可操作
(3)public boolean addFirst(Object element) 添加到队列头部  //ArrayList 无此方法
(4)public boolean addLast(Object element)  添加到队列末尾
addLast()方法和不带索引的add()方法实现的效果一样.

list.add("D");

list.add(0,"D");

list.addFirst("X");

list.addLast("Z");

(二)删

(1)清除数据clear()

(2)LinkedList.remove(Object) 删除指定元素

(3)LinkedList.removeAll() 删除指定list

remove返回的Obj为删掉的元素  主要有三个方法:
(4)public Object remove(int index) 根据索引删除

---用作队栈时可操作
(5)public Object removeFirst() 删除到队列头部
(6)public Object removeLast()  删除到队列末尾

list.remove(0);

list.removeFirst();

list.removeLast();

(三)查

(1)indexOf(Object o)判断o链表中是否存在节点的element和o相等,若相等则返回该节点在链表中的索引位置,若不存在则放回-1。

(2)contains(Object o)方法通过判断indexOf(Object o)方法返回的值是否是-1来判断链表中是否包含对象o。

(3)Get(int index)  获取指定索引下的数据

(4)getFirst():从链表的表头开始去(栈的入口处),//ArrayList没有这个方法

-------以下操作模仿队栈操作------

(4) 获取最初元素System.out.println("链表的第一个元素是 : " + lList.getFirst());

(5)获取最后元素System.out.println("链表最后一个元素是 : " + lList.getLast());

(四)生成新的List

(1)截取生成新的List

List subl = lList.subList(1, 4);

(2)数据复制clone()

调用父类的clone()方法初始化对象链表clone,将clone构造成一个空的双向循环链表,之后将header的下一个节点开始将逐个节点添加到clone中。最后返回克隆的clone对象。

(3)toArray()

创建大小和LinkedList相等的数组result,遍历链表,将每个节点的元素element复制到数组中,返回数组。

(4)遍历数据:Iterator()   有点类似于游标的遍历

注意:

LinkedList是无容量限制的;

LinkedList是非线程安全的;

参考资料;

http://wenku.baidu.com/link?url=gOmQ2zaIBAoYeaoIoswqo1Ygc3Kp9xDbGil_qjw_GKnKMEE8iOprNMh2mG_euHIeoK9nYhjHCiVrfrf-LRVC2vn-SerJbfWmzIT8MPj2tVy

http://www.cnblogs.com/ITtangtang/p/3948610.html

http://blog.csdn.net/giianhui/article/details/7563150

http://blog.csdn.net/chanxiaoxi/article/details/7438498

Java 之 List<T> 接口的实现:LinkedList的更多相关文章

  1. Java 集合系列08之 List总结&lpar;LinkedList&comma; ArrayList等使用场景和性能分析&rpar;

    概要 前面,我们学完了List的全部内容(ArrayList, LinkedList, Vector, Stack). Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例 Ja ...

  2. java提高篇(二二)-----LinkedList

    摘自http://blog.csdn.net/chenssy/article/details/18099417  java提高篇(二二)-----LinkedList 一.概述 LinkedList与 ...

  3. java 集合之实现类ArrayList 和 LinkedList

    List 的方法列表 方法名 功能说明 ArrayList() 构造方法,用于创建一个空的数组列表 add(E e) 将指定的元素添加到此列表的尾部 get(int index) 返回此列表中指定位置 ...

  4. Java基础-Collection子接口之List接口

    Java基础-Collection子接口之List接口 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们掌握了Collection接口的使用后,再来看看Collection接口中 ...

  5. java SE基础&lpar;Collection接口概述&rpar;

    Collection接口相关集成关系例如以下图 1. 关于可迭代接口(Iterable)             可迭代接口仅包括一个方法,返回一个在一组T类型元素上进行迭代的迭代器: public ...

  6. 【转】Java 集合系列08之 List总结&lpar;LinkedList&comma; ArrayList等使用场景和性能分析&rpar;

    概要 前面,我们学完了List的全部内容(ArrayList, LinkedList, Vector, Stack). Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例 Ja ...

  7. Java 中的集合接口——List、Set、Map

    Java 中的集合接口——List.Set.Map 什么叫集合:集合就是Java API所提供的一系列类的实例,可以用于动态存放多个对象.这跟我们学过的数组差不多,那为什么我们还要学集合,我们看看数组 ...

  8. 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案

    方案特点: 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案,简化软件开发流程,减少各应用系统相同模块的重复开发工作,提高系统稳定性和可靠性. 基于HTTP协议的开发接口 使用特点在网页 ...

  9. 【java】&lbrack;转&rsqb;标记接口和标记注解注解

    Java中的标记接口和标记注解 http://blog.sina.com.cn/s/blog_7fdce91f0101d93m.html

随机推荐

  1. css兼容问题

    Opacity的兼容处理          filter:alpha(opacity=100); /* IE */        opacity: 0.5; /* 支持opacity的浏览器*/

  2. Visual Studio 2010 实用功能&colon;使用web&period;config发布文件替换功能

    当建立ASP.NET Web应用程序项目后,默认除了生成web.config外,还生成了web.debug.config与Web.Release.config.顾名思义,根据它们的命名我可以推测到他们 ...

  3. Lambda应用设计模式

    前言 在使用 Lambda 表达式时,我们常会碰到一些典型的应用场景,而从常用场景中抽取出来的应用方式可以描述为应用模式.这些模式可能不全是新的模式,有的参考自 JavaScript 的设计模式,但至 ...

  4. 一个关于发邮件的类,可以模拟发送对smtp服务器或者是本地文件夹

    namespace SportsStore.Domain.Concrete { public class EmailSettings { public string MailToAddress = & ...

  5. ubuntu14&period;04&plus;opencv 3&period;0&plus;python2&period;7安装及测试

    本文记录了ubuntu下使用源码手动安装opencv的过程.步骤来自opencv官网 此外记录了在python中安装及载入opencv的方法. 1.安装opencv所需的库(编译器.必须库.可选库) ...

  6. SQL Server相似度比较函数

    原文:SQL Server相似度比较函数 相似度函数 概述    最近有人问到关于两个字段求相似度的函数,所以就写了一篇关于相似度的函数,分别是“简单的模糊匹配”,“顺序匹配”,“一对一位置匹配”.在 ...

  7. resultset 查询时返回多个相同值

    背景 做个简单的接口开发,拿到的平台比较不理想,好久没重新搭建一个了,正好练练手.用了基础的servlet,maven,logback(log4j不支持格式化,比较烦人),fastjson,druid ...

  8. 一个PHP session的误区,自己留着长记性看看

    最近在研究PHP session相关的东西,销毁session根据手册使用session_destroy()就可以了,但是天真的以为销毁了会话就可以把会话内容也销毁,但是实际上会话的内容还保存在内存里 ...

  9. 针对UDP丢包问题,进行系统层面和程序层面调优

    转自:https://blog.csdn.net/xingzheouc/article/details/49946191 1. UDP概念 用户数据报协议(英语:User Datagram Proto ...

  10. IOS-一步一步教你自定义评分星级条RatingBar

    本文转载至 http://blog.csdn.net/hanhailong726188/article/details/42344131 由于项目的需要,需要设计能评分.能显示评分数据的星级评分条,但 ...