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();
}
}
分享到:
相关推荐
在Java编程语言中,集合框架是处理对象数组的重要工具,其中`List`、`ArrayList`、`Vector`、`HashTable`和`HashMap`是五个关键的接口和类,它们各有不同的特性和用途。以下是这些概念的详细解释: 1. **List接口**...
由于 `Hashtable` 不支持自然排序,你需要先将数据转换为可以排序的数据结构,如 `Dictionary, TValue>`,然后再进行排序。 9. **复制 List<Hashtable>**: ```csharp List<Hashtable> copyOfHashList = new List...
注意,键必须是唯一的,且不可为null,而值可以是任意类型。 ### 4. List List是泛型集合,它是System.Collections.Generic命名空间下的一个类。与ArrayList相比,List更加安全,因为它在编译时就知道了元素的类型...
* HashTable的key和value都不能为null,而HashMap的key和value都可以为null * HashTable的迭代器是fail-fast的,而HashMap的迭代器是fail-safe的 在Java中,Collection接口的子接口包括Set和List,分别代表无序集合...
- HashMap 和 Hashtable 都实现了 Map 接口,HashMap 更快但不是线程安全的,而 Hashtable 是线程安全但较慢。WeakHashMap 则使用弱引用作为键,有助于防止内存泄漏。 - 在选择使用哪种数据结构时,需要考虑性能需求...
C#数据结构之Array、ArrayList、Hashtable、Dictionary ...Array、ArrayList、Hashtable和Dictionary都是C#中的常用数据结构,每种数据结构都有其优缺点,选择合适的数据结构可以提高程序的性能和可读性。
在Java编程语言中,`Hashtable` 和 `HashMap` 都是用来存储键值对的数据结构。这两种数据结构虽然相似,但是在实现细节上存在显著差异。 1. **Hashtable**:作为 `Dictionary` 类的子类,`Hashtable` 是 Java 最早...
List、ArrayList、Vector及map、HashTable、HashMap是Java容器类中的几个重要的接口和实现类,了解它们之间的区别是非常重要的。 首先,我们来看List和ArrayList的区别。List是一个接口,而ArrayList是一个实现了...
List、ArrayList、Vector及map、HashTable是Java中常用的容器类,它们都继承自Collection接口,并提供了不同的实现方式和特点。在实际开发中,选择合适的容器类是非常重要的。 Collection接口是Java中最基本的集合...
在需要根据特定键访问数据的情况下,Dictionary是一个理想的选择,比如在存储购物车信息时,可以使用Dictionary, int>存储商品名和数量,无需类型转换。Dictionary的遍历顺序与添加顺序一致,不同于Hashtable。 5. ...
在IT行业中,哈希表(HashTable)是一种常用的数据结构,它提供了一种高效的方式来存储和检索数据。在.NET框架中,`Hashtable`是System.Collections命名空间下的一个类,它实现了键值对(Key-Value Pair)存储,允许...
如果需要键值对存储,可以选择Map,如HashMap或HashTable;在多线程环境下,需考虑同步性能,可以选择Vector或HashTable;对于内存效率和弱引用的需求,WeakHashMap是一个不错的选择。在实际应用中,通常推荐使用非...
List的类型参数T确保了所有元素都为同一类型,从而提供了更安全和高效的数据存储。 HashTable是一种基于键值对的数据结构,提供快速的查找功能。由于不允许重复键,它的容量通常是质数,以优化哈希函数。然而,...
- 添加了一些键值对(这里键和值都是空字符串,实际应用中应该替换为实际的数据)。 - 提取了所有的键并存入 `ArrayList`。 - 对键列表进行了排序。 - 遍历排序后的键列表,并打印出对应的键值对。 2. **按值...
哈希表(HashTable)在C#编程语言中是一种常用的数据结构,它允许高效地存储和检索键值对数据。在.NET Framework中,`System.Collections`命名空间提供了`HashTable`类,用于存储和管理这些键值对。下面我们将深入探讨...
`HashTable`是古老的键值对存储结构,线程安全但效率较低,已被`HashMap`所取代,`HashMap`是非线程安全但性能更高的选择。 集合框架的使用极大地提高了代码的可读性和复用性,同时通过接口的定义,可以灵活地更换...
通过以上介绍和示例代码,我们可以看到,在.NET Framework中,虽然哈希表默认并不支持排序,但通过一些技巧,如使用`ArrayList`配合哈希表,我们可以方便地实现自定义排序的需求。这种方式不仅能够保持哈希表原有的...
本篇文章将深入解析几种常见的集合类型:ArrayList、Queue、Hashtable、SortedList以及Stack,通过具体的代码示例和理论解释,帮助读者理解每种集合的特点与应用场景。 ### ArrayList `ArrayList`是一个动态数组,...
然而,需要注意的是,由于`Hashtable`是非泛型的,它使用`object`作为键和值的数据类型,这可能会导致类型转换的开销。在.NET Framework 2.0及以后的版本中,推荐使用泛型的`Dictionary, TValue>`,它提供了更好的...
但需要注意的是,哈希表不支持排序,如果需要按特定顺序访问数据,可能需要结合其他数据结构如`SortedList`或`List<T>`。 综上所述,了解并熟练运用VB.NET中的`Hashtable`对于开发高效的数据库应用程序至关重要。...