`

HashTable、HashMap、Vector、ArrayList之间的区别

    博客分类:
  • J2SE
阅读更多

 

所有都是Collection (总接口)
Array
有多少元素是确定的,比如足球队上场的队员有11 名,是固定的,就用array
ArrayList
是不固定的,比如用sql 查询数据库,不知道有多少记录返回,用arraylist.
Enumeration
是用来一个一个列举Collection 的元素的,但java2 后被Iterator 替代。
Hashtable
用在比如你想查中国队的10 号是谁,首先put(new Interger(10),new String(“ 海东”)) ,再String name=get(new Interger(10)); 对于简单的key--value 对来说,hashtable 很有用,建议hashmap.

HashMap/Hashtable Vector/ArrayList 都是放一组对象,一个是用key object 来定位element, 另一个是用index 定位element.
推荐使用HashMapArrayList 的原因一样,因为他们不是Synchronized, 因为不需要obtain lock each time, 它们相对快很多。Synchronized 在最底层是没有意义的,在这里不想多讲。
我本人更加推荐是用LinkedList 而不是ArrayList. 因为在更多的时候,我们很少真的从一个List 里拿出某一个element ,相对的,遍例整个List 的情况最多,在这种情况下用Iterator 是最高效的。
Vector
是一个一维的容器。HashTableHashMap 都是二维的。
和数组的区别是hash…… 不用向数组那样事先定义长度。而可以随意追加。它是key和value对应的。用key作为检索。
HashTable
Vector 都是Synchronized 都是旧的Java 平台的集合类,ArrayListHashMap 由于少了Synchronized 的开销,速度比较快。一般不牵涉到线程之间数据共享的问题都用ArrayListHashMap 吧,当然也可以用LinkedList ,用 listIterator 来遍历.
HashTable
HashMap
上面两个用起来差不多,不过建议使用HashMap ,因为hashtable 被淘汰了

Vector ArrayList
Vector
ArrayList 慢,是因为vector 本身是同步的,而arraylist 不是
所以,没有涉及到同步的推荐用arraylist.

jdk 关于vector 说明的第3 段:
As of the Java 2 platform v1.2, this class has been retrofitted to implement List, so that it becomes a part of Java's collection framework. Unlike the new collection implementations, Vector is synchronized.

显然,vector 是同步的,楼主如不想自己实现同步的话,还是将就用一下vector
既然大家都讲到了同步,那么也稍微谈一下,同步了的HashtableVector 真的那么有用吗?真的如果用了socalled thread-safe Hashtable and Vector 程序代码就不用再同步了吗?
这个例子(Vector vec; Object element;)
if (!vec.contains(element))
   vec.add(element);
这段代码可以不同步吗?不可以,context switch might take place right after you do the containg check.
所以,在程序中还是需要:
synchronized (vec)
{
  if (!vec.contains(element))
   vec.add(element);
}
这样Synchronized Vector 比起没有Synchronized ArrayListLinkedList 来说一点好处都没有了。
再谈ArrayListLinkedList
ArrayList
的缺点是,当the underlying Array reaches the maximum capacity, 一个新的双倍长的array has to be initialized, 紧跟着的是Array Copy, 很慢。同样,remove1/4length 时,array shrinks by creating a new shorter array and array copy all elements. 所以,如果你要用的List 打算常常改变,绝对不应该用ArrayList, 应改为LinkedList.
LinkedList
的缺点是当去取某个indexed element 时,必须做一次遍历。但是,这种情况我发现在real life project 里很少。

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    比较分析Vector、ArrayList和hashtable hashmap数据结构

    比较分析Vector、ArrayList和hashtable hashmap数据结构

    比较Vector、ArrayList和hashtable hashmap

    - HashMap 和 Hashtable 都实现了 Map 接口,HashMap 更快但不是线程安全的,而 Hashtable 是线程安全但较慢。WeakHashMap 则使用弱引用作为键,有助于防止内存泄漏。 - 在选择使用哪种数据结构时,需要考虑性能需求...

    经典讲解List和ArrayList和Vector和HashTable和HashMap区别

    在Java编程语言中,集合框架是处理对象数组的重要工具,其中`List`、`ArrayList`、`Vector`、`HashTable`和`HashMap`是五个关键的接口和类,它们各有不同的特性和用途。以下是这些概念的详细解释: 1. **List接口**...

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

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

    Arraylist、Hashtable、Vector

    ArrayList和Vector之间的主要区别在于线程安全性和性能。ArrayList适合于非线程安全且对性能要求较高的环境,而Vector则适合于需要保证线程安全的场景,但其性能较低。 至于Hashtable,它是一个过时的类,现在通常...

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

    HashMap是非同步的,适合于高并发环境下,但如果不考虑线程安全,HashMap的性能优于同步的HashTable。 4. HashTable类 HashTable是早期的同步Map实现,它不允许键和值为null。与HashMap相比,HashTable的同步特性...

    浅析java中ArrayList与Vector的区别以及HashMap与Hashtable的区别

    ArrayList和Vector,以及HashMap和Hashtable,都是常用的容器,但它们之间存在一些关键的区别,这将影响到在不同场景下的选择和使用。 首先,我们来看ArrayList和Vector的区别: 1. **同步性**: - `ArrayList` ...

    Hashtable和HashMap的区别:

    ### Hashtable与HashMap的区别详解 #### 一、基本概念与历史背景 在Java编程语言中,`Hashtable` 和 `HashMap` 都是用来存储键值对的数据结构。这两种数据结构虽然相似,但是在实现细节上存在显著差异。 1. **...

    Java容器类List、ArrayList、Vector及map、HashTable应用

    Java容器类List、ArrayList、Vector及map、HashTable应用 List、ArrayList、Vector及map、HashTable是Java中常用的容器类,它们都继承自Collection接口,并提供了不同的实现方式和特点。在实际开发中,选择合适的...

    hashmap 实例

    在本文中,我们将深入理解 HashMap 的实例及其工作原理,并与其他数据结构如 Vector、ArrayList、LinkedList 和 Hashtable 进行对比。 首先,我们来看 HashMap 的实例代码: ```java HashMap hashmap = new ...

    各种类集 的区别1

    本篇文章主要探讨了两个重要的类集实现:HashMap与Hashtable,以及ArrayList和Vector的区别。 首先,我们来看HashMap与Hashtable的区别: 1. **线程安全性**:HashMap是非线程安全的,它不保证在多线程环境下的...

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

    HashMap不是线程安全的,如果需要线程安全的Map,可以使用Hashtable。 LinkedHashMap与HashMap类似,但保持了插入顺序或访问顺序。TreeMap使用红黑树,保证了键的排序。 总的来说,理解这些集合的底层实现对于优化...

    在J2ME环境下把JSON解析为Hashtable

    在Java ME(J2ME)环境中,由于资源限制,我们不能直接使用Java SE中的HashMap或ArrayList。在这种情况下,使用Hashtable和Vector作为数据容器是理想的选择,因为它们是J2ME平台支持的数据结构。本篇文章将详细介绍...

    map,list,set,stack,queue,vector等区别和特点1

    在Java编程语言中,集合框架是处理对象组织和操作的...在多线程环境中,线程安全的实现如Vector和Hashtable是必要的,但在单线程或性能要求较高的情况下,非线程安全的实现如ArrayList、LinkedList和HashMap通常更优。

    java集合类面试题总结

    List 中包括 ArrayList、LinkedList、Vector 等,Set 中包括 HashSet、LinkedHashSet 等,Map 中包括 HashMap、Hashtable 等。 List、Set、Map 是否继承自 Collection 接口 List 和 Set 继承自 Collection 接口,...

    ArrayList数组列表[借鉴].pdf

    总结来说,ArrayList和Vector在并发环境下的使用需谨慎,HashMap和Hashtable的选择取决于是否需要线程安全。Properties类是处理字符串键值对的理想选择。理解这些类的特性对于优化代码性能和保证数据安全性至关重要...

    阿里巴巴电话面试试题(含答案).doc

    以下是对Java集合框架、Hashtable与HashMap以及ArrayList和LinkedList的一些关键知识点的详细解释: 1. **Java集合框架**: Java集合框架是一个统一的接口,提供了一种组织和操作对象的方式。它包括了接口(如List...

    java面试笔记.pdf

    1. Vector和ArrayList的区别: - Vector是同步的,适用于线程安全的环境,但因为同步的实现会导致性能损耗。 - Vector在扩容时将容量翻倍,而ArrayList的扩容方式是增加约1.5倍的容量,这使得ArrayList在节约内存...

    java中vector与hashtable操作实例分享

    在Java编程语言中,`Vector`和`Hashtable`都是古老且线程安全的集合类,它们在多线程环境中提供了一种同步访问机制。这两个类分别继承自`AbstractList`和`Dictionary`,并实现了`List`和`Map`接口。由于它们内部的...

Global site tag (gtag.js) - Google Analytics