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区别
List Hashtable 的相关操作 asp.net 内含详细代码示例
C#中的集合示例(Array,ArrayList,Hashtable,List)
18、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 9 19、是否可以继承String 类? 9 20、以下二条语句返回值为true 的有: 10 21、当一个对象被当作参数传递到一个方法后,此方法可...
我们经常用HashTable 来存储将要写入到数据库或者返回的信息,在这之间要不断的进行类型的转化,增加了系统装箱和拆箱的负担,如果我们操纵的数据类型相对确定的化 用Dictionary,TValue> 集合类来存储数据就方便多了...
List、ArrayList、Vector及map、HashTable、HashMap分别的区别
HashMap 和 Hashtable 有什么区别? 说一下 HashMap 的实现原理? ArrayList 和 LinkedList 的区别是什么? 并行和并发有什么区别? 说一下 runnable 和 callable 有什么区别? 线程的 run()和 start()有什么区别...
XML序列化这个东西挺搞人的,当你的Class里有Hashtable这样的东西的时候,在序列化的时候,在XmlSerializer serialize = new XmlSerializer(typeof(myClass));这一句上会出来一个“反射类型时出错”的错误。其实就是...
但是ArrayList也有一个缺点,就是存入ArrayList里面的数据都是Object类型的,所以如果将值类型存入和取出的时候会发生装箱、拆箱操作(就是值类型与引用类型之间的转换),这个会影响程序性能。在.Net 2.0泛型出现以后...
18、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 9 19、是否可以继承String 类? 9 20、以下二条语句返回值为true 的有: 10 21、当一个对象被当作参数传递到一个方法后,此方法可...
Java中List、ArrayList、Vector及map、HashTable、HashMap分别的区别.
21.HashMap 和 Hashtable 有什么区别? 22.如何决定使用 HashMap 还是 TreeMap? 23.说一下 HashMap 的实现原理? 24.说一下 HashSet 的实现原理? 25.ArrayList 和 LinkedList 的区别是什么? 26.如何实现数组和 ...
21. HashMap 和 Hashtable 有什么区别? 22. 如何决定使用 HashMap 还是 TreeMap? 23. 说一下 HashMap 的实现原理? 24. 说一下 HashSet 的实现原理? 25. ArrayList 和 LinkedList 的区别是什么? 26. 如何实现...
List、ArrayList、Vector及map、HashTable、HashMap的区别与用法 使用容器排序 Vector由于使用了synchronized方法(线程安全)
21. HashMap 和 Hashtable 有什么区别? 10 22. 如何决定使用 HashMap 还是 TreeMap? 10 23. 说一下 HashMap 的实现原理? 10 24. 说一下 HashSet 的实现原理? 11 25. ArrayList 和 LinkedList 的区别是什么? 11 ...
主要介绍了C# ArrayList、HashSet、HashTable、List、Dictionary的区别的相关知识点内容,有需要朋友们参考下。
29、为什么需要内部类? 20 30、内部类可以引用它的包含类的成员吗?有没有什么限制? 21 31、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 21 33、...
35. 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 11 36. 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用...