您的位置:首页 > 职场人生

黑马程序员--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学习型技术博客、期待与您交流! ------------
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐