`

ArrayList和Vector的区别,HashMap和Hashtable的区别以及线程安全的理解【转】

    博客分类:
  • Java
阅读更多
就ArrayList与Vector主要从二方面来说.

一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的

二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半



就HashMap与HashTable主要从三方面来说。

一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现

二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的

三.值:只有HashMap可以让你将空值作为一个表的条目的key或value



什么是线程安全?

       如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。

  或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。

举例

比如一个 ArrayList 类,在添加一个元素的时候,它可能会有两步来完成:1. 在 Items[Size] 的位置存放此元素;2. 增大 Size 的值。

  在单线程运行的情况下,如果 Size = 0,添加一个元素后,此元素在位置 0,而且 Size=1;

  而如果是在多线程情况下,比如有两个线程,线程 A 先将元素存放在位置 0。但是此时 CPU 调度线程A暂停,线程 B 得到运行的机会。线程B也向此 ArrayList 添加元素,因为此时 Size 仍然等于 0 (注意哦,我们假设的是添加一个元素是要两个步骤哦,而线程A仅仅完成了步骤1),所以线程B也将元素存放在位置0。然后线程A和线程B都继续运行,都增加 Size 的值。

  那好,现在我们来看看 ArrayList 的情况,元素实际上只有一个,存放在位置 0,而 Size 却等于 2。这就是“线程不安全”了。

Tag标签: c#
分享到:
评论

相关推荐

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

    - **线程安全性**:`Vector`和`HashTable`是线程安全的,而`ArrayList`和`HashMap`不是。在多线程环境下,`ArrayList`和`HashMap`需要通过同步机制来保证数据一致性。 - **存储方式**:`List`接口的实现(如`...

    比较Vector、ArrayList和hashtable hashmap

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

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

    总结起来,ArrayList和Vector的选择主要取决于是否需要线程安全,而HashMap和Hashtable的选择则需要权衡线程安全、null值的使用以及性能等因素。在多线程且对性能要求较高的环境中,通常推荐使用ArrayList配合手动...

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

    ArrayList和Vector的主要区别在于Vector使用了synchronized方法,线程安全,而ArrayList则没有。 ArrayList是Java中最常用的List实现类,它提供了高效的插入、删除和遍历元素的方法。ArrayList基于数组实现,故插入...

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

    Vector与ArrayList类似,但它提供了一种线程安全的实现,这意味着在多线程环境中,多个线程可以同时访问和修改Vector,而不会导致数据不一致。然而,由于其同步机制,Vector的性能通常低于ArrayList。 3. Map接口与...

    Arraylist、Hashtable、Vector

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

    Hashtable和HashMap的区别:

    其中,`ArrayList` 和 `Vector` 都实现了 `List` 接口,但是 `ArrayList` 不是线程安全的,而 `Vector` 是线程安全的。同样地,`LinkedList` 也不是线程安全的。 #### 七、总结 综上所述,`Hashtable` 和 `HashMap...

    各种类集 的区别1

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

    servlet线程安全问题

    2. 使用线程安全的对象:使用线程安全的对象,如 Vector、Hashtable 等,而不是 ArrayList、HashMap 等。 3. 使用锁机制:使用锁机制,如 synchronized 关键字,可以锁定某个对象,以避免多个线程同时访问同一个对象...

    ArrayList数组列表[借鉴].pdf

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

    最新JAVA线程的全部面试题

    ArrayList和Vector的区别,HashMap和Hashtable的区别

    JAVA程序员笔试面试题汇总及答案.pdf

    本资源摘要信息涵盖了 JAVA 程序员笔试面试题汇总及答案,涵盖了基础题、中等题、提高题等多种题型,涉及到访问控制符、ArrayList 和 Vector 的区别、HashMap 和 Hashtable 的区别、Collection 和 Collections 的...

    Java集合多线程安全.docx

    1. `Vector`:`ArrayList`的线程安全版本,所有操作都是同步的,但是性能较差,因为每次操作都需要获取和释放锁。 2. `HashTable`:`HashMap`的线程安全版本,同样所有操作都是同步的,效率较低,不适合高并发场景。...

    hashmap 实例

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

    java集合类面试题总结

    ArrayList 和 Vector 都是使用数组方式存储数据,Vector 由于使用了 synchronized 方法(线程安全),通常性能上较 ArrayList 差,LinkedList 使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是...

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

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

    java实验04.pdf

    这有助于学习Map的键值映射概念以及HashMap和HashTable的区别,HashMap非线程安全但效率高,而HashTable则是线程安全的。 第三部分使用了Vector,这是一种线程安全的动态数组。实验要求读取用户输入的多个字符串,...

    农行研发中心-校招常见面试题汇总.pdf

    HashMap和HashTable的主要区别是HashMap线程不安全,而HashTable线程安全。 HashMap允许键值为null,而HashTable不允许键值为null。HashMap继承自AbstractMap,而HashTable继承自Dictionary。 在选择HashMap还是...

    java collection总结-流氓版

    本文将对ArrayList、Vector、LinkedList、Map接口中的HashMap和Hashtable进行总结,帮助读者理解它们的特点和使用场景。 ArrayList和Vector都是基于数组实现的列表,它们都实现了List接口。ArrayList是非线程安全的...

Global site tag (gtag.js) - Google Analytics