黑马程序员--07.集合框架--04.List实现子类【ArrayList】【LinkedList】【Vector】

来源:互联网 发布:linux 运行nodejs 编辑:程序博客网 时间:2024/05/22 00:25

集合框架--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, java001link.addFirst("java003"); //链表中的元素是 java003, java002, java001link.addFirst("java004"); //链表中的元素是 java004, java003, java002, java001sop(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学习型技术博客、期待与您交流! ------------

 

原创粉丝点击