`
100Air
  • 浏览: 118893 次
  • 性别: Icon_minigender_1
  • 来自: 海南
社区版块
存档分类
最新评论

Vector、ArrayList、List使用剖析

阅读更多
     线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构。这些类均在java.util包中。本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类。

  Collection
  ├List
  │├LinkedList
  │├ArrayList
  │└Vector
  │ └Stack
  └Set
  Map
  ├Hashtable
  ├HashMap
  └WeakHashMap

  Collection接口
  
  Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。
  
  所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。
  
  如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下:
    
  Iterator it = collection.iterator(); // 获得一个迭代子
  while(it.hasNext())
  {
   Object obj = it.next(); // 得到下一个元素
  }
  
  由Collection接口派生的两个接口是List和Set。

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

  和下面要提到的Set不同,List允许有相同的元素。
  
  除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,允许添加,删除,设定元素,还能向前或向后遍历。
  
  实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。

  LinkedList类
  
  LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。
  
  注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:
    
  List list = Collections.synchronizedList(new LinkedList(...));

  ArrayList类
  
  ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。

  size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。
  
  每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。
  
  和LinkedList一样,ArrayList也是非同步的(unsynchronized)。

  Vector类
  
  Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。

  Stack 类
  
  Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。

  Set接口
  
  Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。
  
  很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。
  
  请注意:必须小心操作可变对象(Mutable Object)。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些问题。

  Map接口
  
  请注意,Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。

 

引用地址:http://www.cnpoint.com/framwwork/2006/1018/content_4297.htm

分享到:
评论

相关推荐

    《Vector、ArrayList、List使用深入剖析》-JAVA中文站(www_java-cn_com).htm

    《Vector、ArrayList、List使用深入剖析》-JAVA中文站(www_java-cn_com).htm

    List、ArrayList、Vector及map、HashTable、HashMap分别的区别

    List、ArrayList、Vector及map、HashTable、HashMap分别的区别 List、ArrayList、Vector及map、HashTable、HashMap是Java容器类中的几个重要的接口和实现类,了解它们之间的区别是非常重要的。 首先,我们来看List...

    ArrayList LinkedList Vector性能测试

    在Java编程语言中,ArrayList、LinkedList和Vector是三种常见的动态数组实现,它们都在java.util包中,用于存储和管理对象的集合。这三个类都实现了List接口,提供了多种操作方法,但它们在内部实现和性能特性上有所...

    java Vector和ArrayList的分析及比较

    Java中的ArrayList和Vector都是List接口的实现类,它们都是基于数组实现的动态数组,用于存储对象的有序集合。然而,两者在设计和使用上有显著的区别,主要体现在以下几个方面: 1. **线程安全性**: - `Vector`是...

    JDK1.6中Arraylist,Vector,LinkedList源码

    在Java编程语言中,ArrayList、Vector和LinkedList是三种常见的动态数组实现,它们都属于集合框架中的List接口。这里我们将深入探讨这三种数据结构的源码,理解它们的内部实现、性能特性和适用场景。 首先,...

    比较ArrayList、LinkedList、Vector1

    【ArrayList、LinkedList、Vector对比分析】 1. **List概述** List接口是Java集合框架中的重要组成部分,它是一个有序的集合,允许重复元素,并且保持插入顺序。List接口的实现类主要有ArrayList、LinkedList和...

    ArrayList深度剖析与简单实用

    - 考虑使用`LinkedList`或`Vector`等其他数据结构,根据具体应用场景选择最适合的数据结构。 7. **与其他数据结构比较** ArrayList与数组相比,提供了更灵活的大小调整,但遍历速度较慢,因为需要通过索引访问。...

    Vector底层结构和源码分析

    在本文中,我们将深入分析 Vector 的底层结构和源码,探索它的实现机理和使用场景。 1. Vector 的基本介绍 Vector 类的定义说明:Vector 是一个古老的集合类,继承自 AbstractList 类。它的主要作用是存储和管理...

    java8源码-csn-list:ArrayList、LinkedList、Vector、Stack源码分析

    遍历ArrayList时,使用随机访问(即,通过索引序号访问)效率最高 转数组:Integer[] newText = v.toArray(new Integer[v.size()]) Fail-Fast机制 fail-fast 机制是java集合(Collection)中的一种错误机制。当多个线程...

    对java基础集合部分(List、HashMap、HashSet、ArrayList等)底层源码的分析与总结

    ArrayList和Vector都是List接口的实现,但ArrayList在大多数情况下性能优于Vector,因为它的扩容策略更有效。 ArrayList是基于动态数组实现的,其底层源码(JDK 1.7和1.8)显示,它通过在需要时增加数组大小来扩展...

    JAVA提高第十篇 ArrayList深入分析

    ArrayList是Java集合框架中常用的类,它继承自AbstractList,并实现了List接口,提供了一种基于动态数组的...在并发环境下,应考虑使用线程安全的容器,如Vector或使用Collections.synchronizedList()来同步ArrayList。

    javalist数据结构-Java数据结构-------List.pdf

    ArrayList、Vector和LinkedList都是List接口的实现类,它们各自具有不同的特性和使用场景。 1. ArrayList: ArrayList基于动态数组实现,提供快速的随机访问。在向ArrayList添加元素时,如果现有容量不足,会进行...

    jdk源码阅读一:ArrayList

    - **实现List接口**:ArrayList实现了List接口,这意味着它支持所有List接口定义的操作。 - **允许null值**:ArrayList允许插入null值。 - **提供了操作容量的方法**:用户可以通过特定方法来显式地调整ArrayList的...

    Vector简易购物车添加及删除商品条目演示系统(J2EE版)

    【Vector】在Java中,Vector是ArrayList的一个线程安全版本,继承自AbstractList并实现了List接口。它提供动态数组的功能,可以在运行时自动调整容量。在购物车系统中,Vector用于存储购物车的商品项,确保在多用户...

    JAVA容器效率深度分析List

    本文将深入分析Java中的List接口及其常见的实现类,如ArrayList、LinkedList和Vector,探讨它们的效率差异和适用场景。 首先,List是Java集合框架中的一个重要接口,它扩展了Collection接口,并规定了元素的有序性...

    list加载文件

    常见的`List`实现类包括`ArrayList`、`LinkedList`和`Vector`等。 - **ArrayList**:基于动态数组实现的`List`接口,提供随机访问元素的功能,适用于频繁查询而较少修改的情况。 - **LinkedList**:基于双向链表...

    java提高篇(二一)-----ArrayList.pdf

    ArrayList是Java集合框架中常用的...对于大数据量的并发操作,考虑使用CopyOnWriteArrayList或Vector,它们提供了线程安全,但有不同的性能特性。在选择合适的列表实现时,应根据具体的应用场景和性能需求进行权衡。

    JAVA中List的增删改查

    此外,List接口还有几个子接口和实现类,如ArrayList、LinkedList、Vector等,它们各有特点和适用场景。ArrayList基于动态数组实现,适合随机访问但插入和删除速度慢;LinkedList基于双向链表,插入和删除速度快但...

    ArrayList源码和多线程安全问题分析

    ArrayList源码和多线程安全问题分析 在 Java 编程语言中,ArrayList 是一个常用的集合类,它提供了动态数组的实现,能够存储大量的数据。但是,在多线程环境下,ArrayList 并不是线程安全的。这篇文章主要介绍了 ...

Global site tag (gtag.js) - Google Analytics