`
likanmama
  • 浏览: 806 次
  • 性别: Icon_minigender_1
  • 来自: 杭州码农
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

java中vector与hashtable操作

阅读更多

    本人第一次发文,有意见请大家绕道!

    众所周知,java中vector与hashtable是线程安全的,主要是java对两者的操作都加上了synchronized,也就是上锁了。因此在vector与hashtable的操作是不会出现问题。但是有一种情况:就是将一个hashtable copy到另一个hashtable时,假如使用putAll方法的花,会抛出一个java.util.ConcurrentModificationException异常。先上代码:

  TestSync.java

public class TestSync
{

    /**   
     * main(这里用一句话描述这个方法的作用)   
     * (这里描述这个方法适用条件 – 可选)   
     * @param args    
     * @return void   
     * @exception    
     * @since  1.0.0   
     */
    public static void main(String[] args)
    {
        Map<Integer,User> list  = new Hashtable<Integer, User>();
        List<User> vec = new Vector<User>();
        TestThread thread = new TestThread();
        thread.start();
        int i = 0;
        while(i<1000)
        {
            i++;
            System.out.println("iiiiiiiiii=------------" + i);
            list.clear();
            vec.clear();
            
            //vector与hashtable是线程安全的 ,putAll方法中两个集合实现不一样
            vec.addAll(Constans.USERVEC);
//            synchronized (Constans.USERLIST)
//            {
                list.putAll(Constans.USERLIST);
//            }
            System.out.println("--------" + list.size());
            System.out.println("--------" + vec.size());
        }
        System.out.println("Over---------------------------------------------");
    }

}

class Constans
{
    public static Map<Integer,User> USERLIST  = new Hashtable<Integer, User>();
    public static List<User> USERVEC = new Vector<User>();
}

class TestThread extends Thread
{
    @Override
    public void run()
    {
        for(int i=0;i<100000;i++)
        {
            User user = new User();
            user.setId(i);
            user.setName("name" + i);
            if(!Constans.USERLIST.containsKey(i))
            {
                Constans.USERLIST.put(i,user);
                Constans.USERVEC.add(user);
            }
            
        }
        System.out.println("线程结束------------");
    }
    
}

   当我们将

//synchronized (Constans.USERLIST)
//            {
                list.putAll(Constans.USERLIST);
//            }

不使用同步时,就回抛出异常。是由于Constans.USERLIST不同步,而不是putAll方法不安全。

而Vector与Hashtable不同的是Vector的addAll方法不使用同步也可以正常运行,那是由于Vector的addAll与Hashtable的putAll方法不同,Vector的addAll会将参数先copy一份,因此不会参数异常。

 User.java

public class User
{
    private int id;
    private String name;
    public int getId()
    {
        return id;
    }
    public void setId(int id)
    {
        this.id = id;
    }
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name = name;
    }
   
}
 

写的不好,大家原谅。

 

 

 

 

分享到:
评论

相关推荐

    java中vector与hashtable操作实例分享

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

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

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

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

    - `Hashtable` 是Java早期版本中提供的容器,它继承自Dictionary类,历史较为悠久。而`HashMap` 是在Java 1.2中引入的,它是Map接口的一个实现,设计更为现代且高效。 2. **同步性**: - 同样,Hashtable也是...

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

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

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

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

    Arraylist、Hashtable、Vector

    在Java编程语言中,ArrayList、Hashtable和Vector是三种常见的数据结构,它们都用于存储和管理对象,但各有特点和适用场景。以下是对这三个容器的详细解释: ArrayList是Java集合框架中的一部分,它实现了List接口...

    在J2ME环境下把JSON解析为Hashtable

    【JSON解析为Hashtable在J2ME环境中的应用】 在Java ME(J2ME)环境中,由于资源限制,我们不能直接使用Java SE中的HashMap或ArrayList。在这种情况下,使用Hashtable和Vector作为数据容器是理想的选择,因为它们是...

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

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

    java的hashtable的用法.pdf

    Java中的`Hashtable`是`Dictionary`类的一个实现,它提供了一个基于哈希表的数据结构,允许我们通过键(key)来快速查找和操作值(value)。`Hashtable`类是线程安全的,因此可以在多线程环境中使用而无需额外的同步...

    java接口API,LIST,HASHTABLE

    集合框架是Java中处理一组对象的标准库,包括接口(如`Collection`、`List`、`Set`等)、接口的实现(如`ArrayList`、`LinkedList`、`HashSet`等)和算法(如排序、搜索等操作)。`Collection`是最基础的接口,所有...

    java常用操作代码

    本文将详细解释标题和描述中提到的Java代码片段,主要涉及List、Set、Map等核心数据结构,以及ArrayList、Vector、LinkedList、HashMap和HashTable的区别,并介绍如何遍历Collection和从字符串中提取数字的方法。...

    区别和联系-list-map-set-vector

    ### 区别与联系:List、Map、Set、Vector #### List List 是 Java 集合框架中的一个接口,它允许元素重复,并且每个元素都有一个特定的顺序位置。这意味着可以通过索引来访问 List 中的元素。List 提供了多种实现...

    java中容器是什么意思?

    - **并发处理**:某些容器(如Vector和Hashtable)提供了内置的线程安全性,但在高性能、高并发的环境下,推荐使用Java并发包中的`ConcurrentHashMap`等并发容器。 - **工厂方法**:Java SDK提供了`Collections`工具...

    java 对象集合小例子.

    本篇文章将深入探讨Java中的几个主要对象集合:Hashtable、Vector、LinkedList以及数组和集合的基本概念。 首先,让我们来看Java中的`Hashtable`。Hashtable是Java早期版本中的一个同步容器类,它继承自Dictionary...

    Hashtable和HashMap的区别:

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

    java 中如何从LIST 对象取值

    在Java中,`List`接口是`java.util`包的一部分,它定义了用于存储和操作有序元素集合的方法。`List`的一个主要特点是它可以包含重复元素,并且元素按插入顺序排序。Java标准库提供了几种实现`List`接口的类,如`...

    Java常用数据结构及类.docx

    本文将深入探讨Java中常用的两种数据结构类——Vector和Hashtable。 首先,我们来看Vector类。Vector是Java集合框架的一部分,它类似于数组,但提供了动态扩容和更丰富的操作功能。与普通数组相比,Vector的主要...

    java集合类面试题总结

    Java 集合类是 Java 语言中的一种重要组件,用于存储和操作数据。下面总结了 Java 集合类的一些常见问题和答案。 HashMap 和 Hashtable 的区别 HashMap 和 Hashtable 都是 Java 中的散列表实现,但它们有所不同。...

Global site tag (gtag.js) - Google Analytics