`
wjheye
  • 浏览: 83788 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

List和Hashtable都是可以存储数据的,可为什么有时选择List,有时需要Hashtable,这两个有什么区别?

阅读更多
List和Hashtable都是可以存储数据的,可为什么有时选择List,有时需要Hashtable,这两个有什么区别?
这是一个面试经常问到的问题,我就被问到过,原来还真的没有考虑过这样的问题,只是去比较该用Vector还是ArrayList,该用 Hashtable还是该用HashMap了,我喜欢用示例测试,并在其中加上附注,这样更好理解。
import java.util.*;
/**
*List和Hashtable都是可以存储数据的,可为什么有时选择List,有时需要Hashtable,这两个有什么区别?
*下面的例子可以回答这个问题
*@authorhttp://blog.csdn.net/fenglibing
*
*/
publicclass ListAndHashtable {

    //将构造器私有化,就不能对别的对象创建新对象了。
    private ListAndHashtable()
    {
       testList();
       testHashtable();
    }
    /**
     *@paramargs
     */
    publicstaticvoid main(String[] args) {
       // TODO Auto-generated method stub
       new ListAndHashtable();//但是这里可以正常使用.
      
    }
    void testList()
    {
       List list=new ArrayList();
       list.add("OK1");
       list.add("OK1");//测试是否允许重复值
       list.add(0,"OK2");
       list.add(0,"OK2");//测试是否在指定插入位置的时候,把前面的值替换掉
       list.add("OK3");    
       for(int i=0;i<list.size();i++)
       {
           //List的取值方式,是以下标而取,不能够按值取对象
           System.out.print(" "+list.get(i));
       }
       //上面输出结果为:OK2 OK2 OK1 OK1 OK3,说明允许重复值,
       //就算指定下标也不会把原来的值取代,会自动后移。
       System.out.println();
       Iterator it=list.iterator();
       while(it.hasNext())
       {
           System.out.print(" "+it.next());
       }
       //上面输出结果为:OK2 OK2 OK1 OK1 OK3
       System.out.println();
       Iterator it1=list.listIterator();
       while(it1.hasNext())
       {
           System.out.print(" "+it1.next());
       }
       //上面输出结果为:OK2 OK2 OK1 OK1 OK3
    }
    void testHashtable()
    {
       Hashtable table=new Hashtable();
       table.put("a", "You are very good!");
       table.put("b", "You not are very good!");
       table.put("c", "You are very bad!");
       table.put("a", "You are very good! Last");
       System.out.print(" "+table.get("a"));
       //下面输出结果是:You are very good! Last,说明一个键只能够有一值,后面的值会取代原来的值
       //取值方式,只能够通过按键取值,不能够通过下标取值。
        System.out.println();
       System.out.println(table.toString());
       //输出结果为:{b=You not are very good!, a=You are very good! Last, c=You are very bad!}
       //说明将table的键值可以转换成为字符串输出
       Enumeration e=table.elements();//枚举,可以依次将值列出来
       while(e.hasMoreElements())
       {
           System.out.print(e.nextElement());
       }
       //输出结果为:You not are very good!You are very good! LastYou are very bad!
    }
}
class test
{
    private test()
    {
       //因为ListAndHashtable的构造器为private,所以这里不能够创建对象,会报错
       ListAndHashtable l=new ListAndHashtable();
    }
}
注:
Hashtable与HashMap:
Hashtable是同步的,即线程安全的,就是多个线程也可以时对其进行访问,不会出现数据不一致的情况,且不允许空值;HashMap是非线程安全的,并且允许空值,在线程环境中就需要人为的对其进行同步处理,否则就会出现数据不一致的情况,因而期在单线程的情况下,因为其不同步性,所以就效率上来说HashMap肯定是优于Hashtable了;二者的共同点都是键值对关,且都是一一对应,不可能出现两个键,因为其键为唯一关键字,但值肯定可以相同了。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fenglibing/archive/2007/09/06/1774866.aspx
分享到:
评论

相关推荐

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

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

    List Hashtable 的相关操作 asp.net 内含详细代码示例

    在 ASP.NET 开发中,`Hashtable` 是一个常用的集合类,它存储键值对,允许以任意对象作为键和值。`List&lt;T&gt;` 则是另一种集合类,它表示一个可变大小的对象列表,通常用于存储同一类型的元素。在本教程中,我们将深入...

    C#中的集合示例(Array,ArrayList,Hashtable,List)

    注意,键必须是唯一的,且不可为null,而值可以是任意类型。 ### 4. List List是泛型集合,它是System.Collections.Generic命名空间下的一个类。与ArrayList相比,List更加安全,因为它在编译时就知道了元素的类型...

    Hashtable和HashMap的区别:

    在Java编程语言中,`Hashtable` 和 `HashMap` 都是用来存储键值对的数据结构。这两种数据结构虽然相似,但是在实现细节上存在显著差异。 1. **Hashtable**:作为 `Dictionary` 类的子类,`Hashtable` 是 Java 最早...

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

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

    c#数据结构之array,arraylist,hashtable,dictionary

    我们定义了一个Test1类,具有Num和Flag两个属性,然后使用Dictionary来存储数据,并将其转换为List类型的集合,最后绑定到GridView控件上。 Array、ArrayList、Hashtable和Dictionary都是C#中的常用数据结构,每种...

    Java集合专题总结:HashMap 和 HashTable 源码学习和面试总结

    * HashTable的key和value都不能为null,而HashMap的key和value都可以为null * HashTable的迭代器是fail-fast的,而HashMap的迭代器是fail-safe的 在Java中,Collection接口的子接口包括Set和List,分别代表无序集合...

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

    Collection接口有两个直接实现:List和Set。List是有序的Collection,使用索引来访问元素,而Set是无序的Collection,使用equals方法来比较元素。 List接口提供了很多有用的方法,例如get、set、add、remove等,...

    比较Vector、ArrayList和hashtable hashmap

    - ArrayList 和 LinkedList 的共同特点是它们都属于 Collection 的子接口 List,允许有重复元素,并且是有序的。 - HashMap 和 Hashtable 都实现了 Map 接口,HashMap 更快但不是线程安全的,而 Hashtable 是线程...

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

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

    HashTable Sort

    具体而言,该方法首先将待排序的数据插入到 HashTable 中,在这个过程中可以附加一个顺序或值作为键或值的一部分;然后通过取出这些键或值并对其进行排序,最后再按照排序后的顺序重新获取完整的数据记录。这种方法...

    使用哈希表Hashtable填充ListBox

    在IT行业中,哈希表(HashTable)是一种常用的数据结构,它提供了一种高效的方式来存储和检索数据。在.NET框架中,`Hashtable`是System.Collections命名空间下的一个类,它实现了键值对(Key-Value Pair)存储,允许...

    C#_集合类_Array,Arraylist,List,Hashtable,Dictionary,Stack,Queue_学习资料

    在需要根据特定键访问数据的情况下,Dictionary是一个理想的选择,比如在存储购物车信息时,可以使用Dictionary, int&gt;存储商品名和数量,无需类型转换。Dictionary的遍历顺序与添加顺序一致,不同于Hashtable。 5. ...

    hashtable的使用

    哈希表(Hashtable)是一种数据结构,它通过一个哈希函数将键(Key)映射到表的一个位置来访问记录,这加快了查找记录的速度。哈希表在.NET Framework中是一个常用的集合类,它可以存储键值对,并允许我们根据键快速...

    详解如何选择使用ArrayList、HashTable、List、Dictionary数组

    List的类型参数T确保了所有元素都为同一类型,从而提供了更安全和高效的数据存储。 HashTable是一种基于键值对的数据结构,提供快速的查找功能。由于不允许重复键,它的容量通常是质数,以优化哈希函数。然而,...

    C#中哈希表(HashTable)用法实例详解(添加/移除/判断/遍历/排序等)

    哈希表(HashTable)在C#编程语言中是一种常用的数据结构,它允许高效地存储和检索键值对数据。在.NET Framework中,`System.Collections`命名空间提供了`HashTable`类,用于存储和管理这些键值对。下面我们将深入探讨...

    java接口API,LIST,HASHTABLE

    这里我们主要关注`java.lang.*`和`java.util.*`这两个包。 `java.lang.*`包是最基础的包,包含了进行Java开发所必需的核心类,如`String`、`Object`和`System`等。`String`类是处理文本字符串的常用类,它的对象...

    C# ArrayList、HashSet、HashTable、List、Dictionary的区别详解

    HybridDictionary 的类,充分利用了 Hashtable 查询效率高和 ListDictionary 占用内存空间少的优点,内置了 Hashtable 和 ListDictionary 两个容器,添加数据时内部逻辑如下:当数据量小于 8 时,Hashtable 为 null...

    Collection,List,Set和_Map用法和区别

    需要注意的是,Collection、List、Set 和 Map 等接口和实现类都有其特点和使用场景,需要根据实际情况选择合适的集合类。同时,理解集合类的底层实现机制也非常重要,可以帮助开发者更好地使用集合类。 在 Java 中...

    java面试宝典

    18、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 9 19、是否可以继承String 类? 9 20、以下二条语句返回值为true 的有: 10 21、当一个对象被当作参数传递到一个方法后,此方法可...

Global site tag (gtag.js) - Google Analytics