集合框架--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学习型技术博客、期待与您交流! ------------