链表的定义与结构就不详细介绍了。
链表的优点(即数组的缺点):1. 能动态改变大小,而数组大小固定;2. 不需要连续存储空间; 3. 数据的逻辑次序靠节点的引用变量来实现,不需要移动数据。
链表的缺点(即数组的优点):1. 链式存储结构,非随机存储,需要从表头逐个查找 2. 浪费存储空间,地址部分需要额外存储空间。
java.util包中的LinkedList<E>泛型类创建的对象为双链表对象,主要方法有:
public boolean add(E object)在链表尾部添加节点,或者add(int index,E object)在指定位置添加节点
int size()返回链表长度;public void clear()清空链表等
例:
<pre name="code" class="java">LinkedList<String> list=new LinkedList<String>();
list.add("How");
list.add("are");
则链表list就有了2个节点,索引0处为How,索引1处为are.
LinkedList类与ArrayList类的
本质区别为:前者使用链式存储结构,后者使用顺序存储结构。因此ArrayList不适合动态改变存储数据,如增、删操作(比链表慢),但是数组表获得第n个单元的数据比链表快,因为链表要从表头逐个查找。
遍历链表的时候,尽管可以使用size()方法和get(int index)方法,但对于所有的集合框架,推荐使用迭代器遍历。查看《java链表的get方法遍历VS使用迭代器遍历》。
带泛型的LinkedList类与普通的LinkedList类的比较。泛型的优点就是:在使用泛型类建立的数据结构时,不必进行强制类型转换,即不要求运行时类型检查。
对比如下:
LinkedList myList=new LinkedList();//不带泛型的普通LinkedList,存储Object对象即任何对象,因为任何对象都是Object类的子类
myList.add("how");
String s=(String)myList.get(0);///get()返回Object对象,需要强制类型转换到普通对象
LinkedList<String> myList1=new LinkedList<String>();//带泛型,指定了该链表存储String类型的对象
myList1.add("how");
String s1=myList1.get(0);//无需类型转换