List实现类

List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。和下面要提到的Set不同,List允许有相同的元素。

除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个 ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,允许添加,删除,设定元素, 还能向前或向后遍历。

除ListIterartor外,List接口中增加了根据位置增、删、改和获取元素的方法:
E get(int index); 获取指定位置的元素
E set(int index, E element); 更改指定位置的元素
void add(int index, E element); 向指定位置添加元素
E remove(int index); 移除指定位置的元素

实现List接口的实现类LinkedList,Vector,ArrayList 。
1:Vector类
Vector类是从jdk1.0开始出现的,从 Java 2 平台 v1.2 开始,此类改进为可以实现List接口,使它成为集合框架中的一员。

Vector的方法:

public Vector()(默认大小是10)
public Vector(int initialCapacity) 指定vector的初始容量
public Object elementAt(int index)
public void removeElement(int index)
public void insertElement(Object obj,int index)
public boolean removeElement(Object obj)
public void removeAllElements()

          Vector v = new Vector();
          v.add("java01");
          v.add("java02");
          v.add("java03");
          v.add("java04");
          Enumeration en = v.elements();
          while(en.hasMoreElements())
          {
               System.out.println(en.nextElement());
          }

其中Enumeration是Vector取出元素的特有方式。后来因为名称以及方法的名称都过长,被迭代器取代了。Vertor底层是基于数组实现的,且其是同步的。但是添加到一定量的元素后,再添加元素其长度会100%扩容(原来的长度10变成20),而ArrayList底层也是基于数组实现的,但其只会小幅扩容(原数组长度*3 除2再加1,更节约空间)。Vector被ArrayList取代。

Stack继承自Vector,实现一个后进先出的堆栈。Stack刚创建后是空栈。
Stack提供5个额外的方法使得Vector得以被当作堆栈使用。

E push(E item) 向栈中压入一个元素
E pop() 从栈顶弹出一个元素
E peek() 得到栈顶元素而不将其弹出栈
boolean empty() 测试栈是否为空
int search(Object o) 检测一个元素在栈中的位置

2:ArrayList类
内部是数组数据结构,是不同步的,替代了Vector,查询速度快。

3:LinkedList类
内部是链表数据结构,是不同步的。增删元素的速度很快。(链表数据结构)
特有方法:
addFirst();
addLast():
=========jdk1.6==========
offerFirst();
offetLast();

getFirst();.//获取但不移除,如果链表为空,抛出NoSuchElementException.
getLast();
=========jdk1.6==========
peekFirst();//获取但不移除,如果链表为空,返回null.
peekLast():

removeFirst();//获取并移除,如果链表为空,抛出NoSuchElementException.
removeLast();
=========jdk1.6==========
pollFirst();//获取并移除,如果链表为空,返回null.
pollLast();

总结:
List:
|–Vector:内部是数组数据结构,是同步的。增删,查询都很慢!
|–ArrayList:内部是数组数据结构,是不同步的。替代了Vector。查询的速度快。
|–LinkedList:内部是链表数据结构,是不同步的。增删元素的速度很快。

区别:
Vector和ArrayList
vector是线程同步的,所以它也是线程安全的,而arraylist是线程异步的,是不安全的。单线程环境Arraylist效率比较高。
如果集合中的元素的数目大于目前集合数组的长度时,vector增长率为目前数组长度的100%,而Arraylist增长率为目前数组长度的50%。如果在集合中使用数据量比较大的数据,用vector有一定的优势。
Arraylist和LinkedList
ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
对于随机访问get和set,ArrayList要优于LinkedList,因为LinkedList要移动指针。而对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

参考博客:http://www.cnblogs.com/lzxl/p/4308832.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值