我们的口号是,一天一个类,一点也不累 。。

今天要讲的是---LinkedList

首先,还是看看他的组织结构

Class LinkedList<E>

    java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractList<E>
java.util.AbstractSequentialList<E>
java.util.LinkedList<E> Type Parameters:
E - the type of elements held in this collection All Implemented Interfaces:
Serializable, Cloneable, Iterable<E>, Collection<E>, Deque<E>, List<E>, Queue<E> public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, Serializable

相比上两次介绍的两个类,他的实现接口多了一个Queue & Deque(一个是队列一个是双端队列)

既然这个也实现了List,同样具有List的一些性质,不知大家是否还记得List中的对象容许为NULL.

在API的官网上面明确说了一句:【Note that this implementation is not synchronized.】 也就是说LinkedList也是非线程安全的。

和ArrayList一样,库中存在线程安全的实现方法:

  List list = Collections.synchronizedList(new LinkedList(...));

所以在非线程安全的容器里面会有一个用来记录该对象改变次数的计数器modCount.

【首先声明一下,这个LinkedList里面维持这两个对象,一个是first,一个是last,他们的数据类型是Node的内部类。

  

    private static class Node<E> {
E item;
Node<E> next;
Node<E> prev; Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}

1、构造方法:

  LinkedList()

    Constructs an empty list.

  LinkedList(Collection<? extends E> c)

    Constructs a list containing the elements of the specified collection, in the order they are returned by the collection's iterator.
 
2、首先特别解释一下,transient,这样的对象在行进序列话的时候,  是不被需序列化的,是临时的。
   因为在读源码的时候经常会出现这个关键字。
 
3、因为这个是链表,所以提供了一些关于链表的操作。
  e.g. getFirst() getLast()。。。。。。
 
4、值得注意的是从1.6开始,新增了一项称道的方法(虽然自己可以方便实现),这就是能够生成倒序的迭代器。
 /**
* Adapter to provide descending iterators via ListItr.previous
*/
private class DescendingIterator implements Iterator<E> {
private final ListItr itr = new ListItr(size());
public boolean hasNext() {
return itr.hasPrevious();
}
public E next() {
return itr.previous();
}
public void remove() {
itr.remove();
}
}

这样以来就满足了在特定场合的需要。

哇喔,这个类要说的好少啊!~~~

不再说的多少,而在多思多练。

中国有句谚语:

        不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之。

一天一个类,一点也不累 之 LinkedList的更多相关文章

  1. 一天一个类,一点也不累 之 Set接口

    我们的口号是:一天一个类,一点也不累-- 再次回忆一下集合相关的类图. 官方API上这样介绍这个接口: A collection that contains no duplicate elements ...

  2. 一天一个类,一点也不累 之 Vector

    一天一个类,一点也不累. 今天要说的是ArrayList的亲兄弟--Vector 亲兄弟?看看“族谱” Class Vector<E> java.lang.Object java.util ...

  3. 一天一个类,一点也不累之TreeSet

    一天一个类,一点也不累. 现在要说的是---TreeSet public class TreeSet<E> extends AbstractSet<E> implements ...

  4. 一天一个类,一点也不累之HashSet

    最近忙着一个小项目结题,故没能按时完成[一天一个类,一点也不累],还好项目优秀,算是对自己一点点的安慰和鼓励.~~~ 今天要说的是HashSet 既然是继承自Set,那么就必须有Set的一些属性,比如 ...

  5. List接口:(介绍其下的两个实现类:ArrayList和LinkedList)

    以下介绍接口: List接口:(介绍其下的两个实现类:ArrayList和LinkedList) ArrayList和数组非常类似,其底层①也用数组组织数据,ArrayList是动态可变数组. ①  ...

  6. TypeToken 是google提供的一个解析Json数据的类库中一个类

    Type listType = new TypeToken<LinkedList<User>>(){}.getType(); Type是java里的reflect包的Type ...

  7. java学习笔记—实现一个类MyInputStream(28)

    1 实现一个类MyInputStream读取文件,且不能抛出异常 public class TestDemo { public static void main(String[] args) thro ...

  8. java进阶之反射:反射基础之如何获取一个类以及如何获取这个类的所有属性和方法(2)

    当我们知道一个类的对象,或者知道一个类的路径,或者指导这个类的名称的时候我们可以获取到这个类的类对象 当我们仅仅知道一个类的类对象的时候我们依然无法操作这个类,因为我们不知道这个类的属性,类的方法.那 ...

  9. Java中是否可以调用一个类中的main方法?

    前几天面试的时候,被问到在Java中是否可以调用一个类中的main方法?回来测试了下,答案是可以!代码如下: main1中调用main2的主方法 package org.fiu.test; impor ...

随机推荐

  1. 我在网站开发中经常用到的几个js函数01

    这是我在最近的一个网站项目中频繁用到的几个js函数,非常实用.包括:1.js获取地址栏参数:2.返回cookies字符串中指定键对应的值:3.json格式的日期转换为正常格式4.清除cookie. / ...

  2. Codeforces Round #316 (Div. 2C) 570C Replacement

    题目:Click here 题意:看一下题目下面的Note就会明白的. 分析:一开始想的麻烦了,用了树状数组(第一次用)优化,可惜没用. 直接判断: #include <bits/stdc++. ...

  3. 我的Python成长之路---第八天---Python基础(25)---2016年3月5日(晴)

    多进程 multiprocessing模块 multiprocessing模块提供了一个Process类来代表一个进程对象 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  4. USB接口定义

    一般的排列方式是:红白绿黑从左到右 定义: 红色-USB电源 标有-VCC.Power.5V.5VSB字样 绿色-USB数据线(正)-DATA+.USBD+.PD+.USBDT+ 白色-USB数据线( ...

  5. mysql ifnull if

    IFNULL(expr1,expr2) 如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2.IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境. mysq ...

  6. Windows Phone 8初学者开发—第9部分:Windows Phone 8模拟器概述

    原文 Windows Phone 8初学者开发—第9部分:Windows Phone 8模拟器概述 第9部分:Windows Phone 8模拟器概述 原文地址: http://channel9.ms ...

  7. 基于mini2440的IIC读写(裸机)

    mini2440开发板提供的测试代码过于复杂,让人很难理解,而且有些错误,如GPE14-15不能设置上拉电阻,可是代码里却设置了,虽然无关紧要.为了方便学习,我在闲暇之时我研究了一下.IIC的原理是比 ...

  8. Latex(一)公式自动编号与自动引用

    在进行latex引用时,有两种办法: 一,被动引用. 如有这样一段代码: $$ x^2+y^2= z^2.\eqno(1.1) $$ In this paper, we investigated (1 ...

  9. 编译kernel:内核makefile的作用

    < 嵌入式linux应用完全开发手册 > 韦东山 内核Makefile的使命: 编译哪些内核文件? 读取各级子目录makefile, .config, auto.conf, Kbuild, ...

  10. OpenGL ES 如何能看到一个物体内部和象3dmax中能只显示网格线

    上一篇 OpenGL ES 正反面设置指令 中分析了正反面的判区方法,那么正反面有什么用呢?接下来我们就要引入一个叫做背面消除的概念.在3dmax中有个选项,当你用挤压修改器挤出一个中空的长方体时,在 ...