首页 > 代码库 > java的源码分析 list

java的源码分析 list

List在数据结构中表现为是线性表的方式,其元素以线性方式存储,集合中允许存放重复的对象,List接口主要的实现类有

就数据结构而言,数据的对应方式分为一对一,0对0,一对多,多对多。在数据结构上就是线性表,集合,树,图。而list就是一个线性表。
ArrayList
ArrayList其实就是一组长度可变的数组,当实例化了一个ArrayList,该数据也被实例化了,当向集合中添加对象时,数组的大小也随着改变, 这样它所带来的有优点是快速的随机访问,即使访问每个元素所带来的性能问题也是很小的,但缺点就是想其中添加或删除对象速度慢,当你创建的数组是不确定其 容量,所以当我们改变这个数组时就必须在内存中做很多的处理,如你想要数组中任意两个元素中间添加对象,那么在内存中数组要移动所有后面的对象。
可变的数组这几个词语的含义就是,他的本质仍然是数组,数组的特点就是一块连续的内存,并且读取速度很快,因为可以按照下标访问,直接命中。add需要移动数据,对应的get和set需要的是直接命中
LinkedList
LinkedList是通过节点的连接实现链表的数据结构,向linkedList中插入或删除元素的速度是特别快,而随机访问的速度相对较慢,这个是由 于链表本身的性质造成的,在链表中,每个节点都包含了前一个节点的引用,后一个节点的引用和节点存储值,当一个新节点插入式,只需要修改其中相关的前后关 系节点引用即可,删除节点也是一样。操作对象只需要改变节点的链接,新节点可以存放在内存的任何位置,但也就是因为如此LinkedList虽然存在 get()方法,但是这个方法通过遍历节点来定位所以速度很慢。LinkedList还单独具 addFrist(),addLast(),getFrist(),getLast(),removeFirst(),removeLast()方法,这 些方法使得LinkedList可以作为堆栈,队列,和双队列来使用。

说白了,ArrayList和LinkedList就是数据结构中的顺序存储表和链式存储表。


java的源码分析 list