JAVA-初步认识-常用对象API(集合框架-List常用子类的特点)

一.

凡是虚线框都是接口,我们真正在使用的时候,用的是接口中的子类,

List接口中,有一堆子类,是我们开发中常用的容器。ArrayList,LinkList,Vecter这三个算是开发中比较常用的。

(list下面有三个常用的对象)

具体的容器必须明确其特点,那么你才知道什么时候该用这容器。

1. vector

容器之所以能够进行区分,是因为容器的内部的数据结构不一样,现在vector内部用的就是一个数组。数组本身就是一种存储数据的方式,本身就是一种结构。这种结构的特点在于,每一个元素上都带着编号,而且是连续地存储。一开辟空间,很多的小格子就出来了。

vetor从1.0版本就出现了,这个接口1.2才出来(vetor是早就有了,但是称为List接口的子类接口是从1.2开始的),

在1.0的时候,用的集合就一个vetor,到1.2才有的集合框架,才加了各种数据结构进来,产生了一个体系。1.2的时候也把vetor纳入进来了,vetor是元老级别的,它1.2才实现了list,具备了list功能,并成为java集合框架中的成员。vetor是同步的,也就是说线程是安全的。

2. ArrayList

内部也是数组结构,而且是可变的,是不同步的。为什么会有ArrayList的出现,因为vetor的同步效率低。结构是一样的,为什么要出现两个,因为替代了vetor。如果是多线程怎么办?就采用vetor?(不是),我们要么给ArrayList加锁,要么采用其他方式。vetor几乎不用了。怎么加锁呢?把那些添加删除的方法放到同一个锁里面就可以了。

ArrayList中提高了一个大小可变数组,vetor中也提到了可增长的对象数组。什么叫长度可变的数组?原先我们学习的时候,数组是固定长度,集合怎么实现不断地往里面加元素呢?可变长度数组原理,创建一个新数组,将原来数组中的内容都复制到新数组中来。

vetor是一定延长,ArrayList是有一半的机率延长。vetor是既浪费空间,也浪费效率,ArrayList会比vetor强一些。

3. linkedList

链接列表简称链表。

集合中,只要不是vetor,都是非同步的,因为效率高。

链表什么特点呢?数组怎么存储元素呢?将空间切割成多个小方格,然后将元素存储进去。怎么存储进去的呢?数组一开辟空间,都有角标,依据角标来存储元素。

链表是这样的:前一个元素的格子,记住下一个元素的角标值。

链表结构要是删除某一个元素,只需要记住下下个元素的角标值就可以了。

为什么要数据结构,就是对数据操作不一样,操作特点有所不同。链表这种结构删除元素的速度很快。

 

posted @ 2017-12-31 15:29  前锋营  阅读(257)  评论(0编辑  收藏  举报