zoukankan      html  css  js  c++  java
  • Java 之 List<T> 接口的实现:LinkedList

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

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

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

    首先我们来看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(14);  

     (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

  • 相关阅读:
    Moment.js 超棒Javascript日期处理类库
    java模拟http/https post请求
    Mysql中int和varchar类型
    ssh免密码登录
    Linux优雅退出问题
    Jenkins的权限控制和Rundeck的远程认证
    Jenkins系统+独立部署系统
    Nginx基本介绍
    初窥项目构建
    Rundeck概况
  • 原文地址:https://www.cnblogs.com/jilodream/p/4219794.html
Copyright © 2011-2022 走看看