Java Se :线性表

 Java的集合框架分为两个系列,Collection和Map系列。在大学期间,学习数据结构时,好像学习了线性表、非线性表、树,哎,都给忘了。其实,在Collection系列内部又可以分为线性表、集合两大类。

 

常用的线性表有:ArrayList、LinkedList、Vector、Stack、Queue。

其中Stack、Queue是特殊的线性表。他们的特殊性表现在:

Stack是先进后出,FILO,也叫后进先出:LIFO。

Queue是先进先出,FIFO。

 

Collection系列中还有Set集。他们的实现比较复杂。后续将说明。

 

另外一个系列是Map,Dictionary为代表的<Key, Value>集合,具体如何实现,将在后续说明。

 

ArrayList

正如它的名字一样,JDK中确实是使用数组实现的。elementData就是。

 

 

另外,这个类中也提供了直接转为数组的方法:

 

 

 

数组的特征是可以快速查询,但是插入、删除操作不方便。

 

LinkedList

 

看到这个名字,你可能会想到他是个单链表。如果这样想,只能说是对了一半。它确实是个链表,但不是一个单链表,而是一个双向链表。

 

下面看看源码:

 

 

看看这个Entry<K>到底是个什么玩意:

 

如果是单链表,有next就可以了,而不需要有previous。

双向链表的特征是:查找不方便,增删方便。

 

Vector

 

Vector汉语意思是向量,从名字上就可以知道是一个可变的集合。它是一个可变数组。

 

 

它和ArrayList都采用数组实现,但是他俩个有明显的区别,而这个问题也是面试时常会考到的问题。

 

Stack

Stack,后进先出,也就是说每次取数,都是取出最后一个。

这个特性实现起来一点也不难,使用数组就可以实现了。接下来看看JDK中是如何实现的:

 

 

JDK中也是使用数组的。

 

 

Queue

 

这是一个接口,在并发编程中使用很多。下面列出了Queue的实现类:

 

 

posted @ 2014-09-24 11:05  乐享程序员  阅读(517)  评论(2编辑  收藏  举报