黑马程序员--07.集合框架--04.List实现子类【ArrayList】【LinkedList】【Vector】
2013-07-24 19:44
549 查看
集合框架--4 List的实现子类
ArrayList LinkedList Vector
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------1. List接口常见实现子类
1). List接口常见实现子类的概述
(1). List接口常见实现子类的继承体系图(2). List接口的实现类:ArrayList和LinkedList的区别
[1]. ArrayList类的特点:
---->底层实现的数据结构是数组
---->C、R、U和D的特点:查询速度快,但是增删改速度很慢
[2]. LinkedList类的特点:
---->底层实现的数据结构是链表
---->C、R、U和D的特点:查询速度慢,但是增删改速度很快
(3). ArrayList和Vector的区别
[1]. Vector的出现是先于集合框架Collections Framework出现
[2]. ArrayList和Vector的区别之一(数据结构的角度)
两者底层数据结构都是数组。
可变长度列表的基本原理:
底层的数组默认长度为10,当ArrayList或者Vector中数组的长度变化到10以外之后,会重新在堆内存中new出来一个更长数组,并复制数组中原有的元素到这个新的数组中。从而总体看起来是可变长度的列表。
{1}.ArrayList中,重新new出来的数组,长度每次延长50%
{2}. Vector中,重新new出来的数组,长度每次延长100%
【结论】ArrayList要好一些,节省了内存空间
[3]. ArrayList和Vector的区别之二(线程并发性的角度)
{1}. ArrayList是线程不同步的
效率高,数据安全性差----多线程使用的时候,需要自己加锁
{2}.Vector是线程同步的
效率低,但是数据安全性好
2). Vector类特有的操作方法(举例)
Vector类产生于JDK1.0。因此,Vector有自己的独特的访问方式(1). 增(JDK1.0方法)
void addElement(E obj)
(2). 获取/查(JDK1.0方法)
E elementAt(int index)
(3). Vector的三种迭代方式
[1]. 通过Iterator接口进行迭代
[2]. 通过Enumeration接口进行迭代
{1}. Enumeration是Vector特有的迭代元素的方式。
{2}. Enumeration的功能和Iterator重复,由于名字太长并且不好记忆,逐渐被Iterator取代。
[3]. 遍历角标for循环迭代
2. LinkedList类
1). LinkedList特有的方法
【说明】LinkedList没有修改这个操作。只有增、删、查这三个操作,并且这三个操作只能是增删查链表的头、尾元素
(1). 增
[1].增加到链表的头元素:void addFirst(E element);
[2].增加到链表的尾元素:void addLast(E element);
(2). 删
[1].删除链表的头元素:E removeFirst();
[2].删除链表的尾元素:E removeLast();
(3). 查/获取
[1].获取链表的头元素:E getFirst();
[2].获取链表的尾元素:E getLast();
【举例】
LinkedList link =new LinkedList();
link.addFirst("java001");
link.addFirst("java002"); //链表中的元素是 java002, java001
link.addFirst("java003"); //链表中的元素是 java003, java002, java001
link.addFirst("java004"); //链表中的元素是 java004, java003, java002, java001
sop(link);
sop(link.removeFirst()); //返回被移除的元素
打印结果:
2). 链表的特有迭代方式
通过Collection的isEmpty()+ removeLast()/First()操作来迭代链表【示例】
LinkedList link =new LinkedList();
link.addFirst("java001");
link.addFirst("java002");
link.addFirst("java003");
link.addFirst("java004");
while(!link.isEmpty()){
sop(link.removeFirst());
}
【get/removeFirst()或者get/removeLast()方法抛出异常】
如果列表没有元素,则这些方法会抛出异常
e.g.在上面的代码最后再加上一句:link.removeFirst();
本来列表已经空了,再一次移除不存在的元素,就会抛出异常
3). LinkedList在JDK6以后特有的方法
(1). 增offerFirst/offerLast取代了addFirst/addLast
(2). 删
pollFirst/pollLast取代了removeFirst/removeLast
(3). 查/获取
peekFirst/peekLast取代了getFirst/getLast
【注意】JDK6新增的这些LinkedList的方法,当出现没有对应的元素的时候进行了获取或者删除的时候,新增的方法和老方法的区别就是新的方法返回null,老的方法抛出NoSuchElement这样的异常。
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
相关文章推荐
- 黑马程序员------集合框架(No.2)(ArrayList、LinkedList、vector)
- 黑马程序员_JavaSE基础17 之 集合框架 Vector LinkedList ArrayList HashSet LinkedHasSet TreeSet
- 黑马程序员_学习笔记:9) 集合框架1:Collection(List、Set)、Iterator、List(ArrayList、LinkedList、Vector)
- 黑马程序员_集合1(ArrayList,LinkedList,Vector,Iterator,ListIterator)
- 黑马程序员_集合1_(ArrayList、LinkedList、Vector、Iterator、ListIterator)
- 集合框架源码分析三(实现类篇ArrayList,LinkedList,HashMap)
- 16 API-集合(List的子类(ArrayList_Vector_LinkedList,集合嵌套遍历),JDK5新特性(泛型,增强for循环,静态导入,可变参数)
- java集合类,List和Set比较,各自的子类比较(ArrayList,Vector,LinkedList;HashSet,TreeSet),Map集合比较
- (9) java ---- 集合框架图 ArrayList,LinkedList,Vector各自的性能特点及区别
- API--集合框架Vector集合,linkedList,ArrayList,HashSet集合
- [javaSE] 集合框架(ArrayList,LinkedList,Vector)
- 集合框架源码分析三(实现类篇ArrayList,LinkedList,HashMap)
- List接口实现类-ArrayList、Vector、LinkedList集合深入学习以及源码解析
- 黑马程序员面试题集合1(ArrayList,LinkedList,Vector,Iterator,ListIterator,HashSet,TreeSet,JDK1.5新特性泛型)
- Java基础之集合List-ArrayList、LinkedList、Vector的底层实现和区别
- 集合框架 Vector LinkedList ArrayList HashSet LinkedHashSet TreeSet
- Java 集合:Collection,List,ArrayList,Vector,LinkedList(实现方式,对比)
- 集合框架源码分析三(实现类篇ArrayList,LinkedList,HashMap)
- 黑马程序员——List集合中ArrayList、linkedList、Vector的数据结构及特点
- Java 集合:Collection,List,ArrayList,Vector,LinkedList(实现方式,对比)