现在的位置: 首页 > 综合 > 正文

List, ArrayList, LinkedList, Vector 及 Map, HashMap, HashTable区别

2018年03月31日 ⁄ 综合 ⁄ 共 1434字 ⁄ 字号 评论关闭

一、前言:

本文是力求将这几点讲的通俗易懂,让大家同时也让自己在基础上,更加牢固点。

Collection                 有序的集合
 ├------List                 接口
 │         ├LinkedList 链表               (异步, 线程非安全)
 │         ├ArrayList    顺序结构动态数组类 (异步, 线程非安全)
 │         └Vector        向量(同步, 线程安全)
 │           └Stack    栈
 └Set                         接口
Map                           接口
 ├Hashtable            (同步, 线程安全)
 ├HashMap             (异步, 线程非安全)
 └WeakHashMap

上图,给出了它们之间的关系。

 

二、作用:

2.1 List, ArrayList, LinkedList, Vector

List是一个有序的集合(collection),它是一个接口(interface),而LinkedList, ArrayList, Vector都是List的实现。

LinkedList & ArrayList介绍

    (1) LinkedList是一个链表结构;ArrayList是一个数组结构。

    (2) LinkedList的链表特性,其添加/删除某个元素不用移动数据,且遍历只能顺序遍历;

          ArrayList的数组特性正好与链表特性相反,添加/删除某个元素需要移动它之后的数据,

         不过,由于是有序的,所以遍历可以采用如二分查找来快速定位。

         注:ArrayList实现了可变大小,当需要添加N个元素时,可调用ensureCapacity方法来

                 提高效率。

    (3) 由于两者都是异步,所以导致线程不安全:即多个线程可以同时读/写,但这时需要自己来做同步方法。

Vector介绍

     与ArrayList类似,只不过它是同步,线程安全的,当一个线程占用并使用时,另一个线程改变其状态会导致

异常ConcurrentModificationException。

Stack介绍

      从图中可以看出,Stack是继承Vector的,它实现了LIFO(Last In First Out,后进先出),扩展Vector并

实现了push和pop功能,以及其它几种方法。

2.2 Map, HashMap, HashTable

Map没有继承Collection,它提供了Key-Value即键值映射,一个Map中,不能有相同的Key,且每个Key只能

有一个Value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一

组key-value映射。

HashMap & HashTable介绍

HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。

但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap 的

容量成比例。

WeakHashMap介绍

它是一种改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收。

抱歉!评论已关闭.