Chinaunix首页 | 论坛 | 博客
  • 博客访问: 742649
  • 博文数量: 130
  • 博客积分: 2951
  • 博客等级: 少校
  • 技术积分: 1875
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-04 18:32
文章分类

全部博文(130)

文章存档

2013年(1)

2012年(129)

分类: Java

2012-02-21 17:21:39

public class ArrayListextends AbstractListimplements ListRandomAccessCloneable,Serializable

1. List 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于 Vector 类,除了此类是不同步的。)

2. size、isEmpty、get、set、iterator 和 listIterator 操作都以固定时间运行。add 操作以分摊的固定时间 运行,也就是说,添加 n 个元素需要 O(n) 时间。其他所有操作都以线性时间运行(大体上讲)。与用于 LinkedList 实现的常数因子相比,此实现的常数因子较低。

3. 每个 ArrayList 实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向 ArrayList 中不断添加元素,其容量也自动增长。并未指定增长策略的细节,因为这不只是添加元素会带来分摊固定时间开销那样简单。

4. 在添加大量元素前,应用程序可以使用 ensureCapacity 操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。

5. 此类的 iterator 和 listIterator 方法返回的迭代器是快速失败的:在创建迭代器之后,除非通过迭代器自身的 remove 或 add 方法从结构上对列表进行修改,否则在任何时间以任何方式对列表进行修改,迭代器都会抛出 ConcurrentModificationException。如下:

  1. List<Integer> array = new ArrayList<Integer>();
  2. array.add(new Integer(1));
  3. array.add(new Integer(2));
  4. array.add(new Integer(3));
  5. Iterator<Integer> iterator = array.iterator();
  6. array.remove(0);
  7. while(iterator.hasNext()){
  8. iterator.next(); //会抛出java.util.ConcurrentModificationException
  9. }

6. 有几个需要注意的方法:

1. ArrayList.listIterator()

  1. List<Integer> array = new ArrayList<Integer>();
  2. array.add(new Integer(1));
  3. array.add(new Integer(2));
  4. array.add(new Integer(3));
  5.         
  6. ListIterator<Integer> iterator = array.listIterator();
  7. iterator.add(new Integer(5));
  8.         
  9. for(Integer i : array){
  10.      System.out.println(i);
  11. }

输出:5 1 2 3

阅读(1214) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~