(编程解决)List和Hashtable都是可以存储数据的,可为什么有时选择List,有时需要Hashtable,这两个有什么区别?
2014-05-22 15:08
381 查看
(编程解决)List和Hashtable都是可以存储数据的,可为什么有时选择List,有时需要Hashtable,这两个有什么区别?
(编程解决)List和Hashtable都是可以存储数据的,可为什么有时选择List,有时需要Hashtable,这两个有什么区别?这是一个面试经常问到的问题,我就被问到过,原来还真的没有考虑过这样的问题,只是去比较该用Vector还是ArrayList,该用 Hashtable还是该用HashMap了,我喜欢用示例测试,并在其中加上附注,这样更好理解,如需要看更详细的集合之间的关系,请参看: 集合詳細學習(包括Vector、ArrayList、List等等的比較與實例)。
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了;二者的共同点都是键值对关,且都是一一对应,不可能出现两个键,因为其键为唯一关键字,但值肯定可以相同了。
相关文章推荐
- (编程解决)List和Hashtable都是可以存储数据的,可为什么有时选择List,有时需要Hashtable,这两个有什么区别?
- List和Hashtable都是可以存储数据的,可为什么有时选择List,有时需要Hashtable,这两个有什么区别
- 如何实现把CListCtrl类中的数据存储到txt或excel中,并且存储位置可以自己选择?具体代码是什么?
- GET请求和POST请求有什么区别?GET请求的参数在URL的问号后面显示,而POST参数不在URL上;POST可以比GET请求更大的数据…一般的回答都是这样。 但是作为一个高端大气上档次的程序
- 在java代码里写Map<String, ?>和Map<String, Object>都是可以用的,他们两个有什么区别?
- 在使用JS编程中,有时需要在一个方法返回两个个或两个以上的数据
- c#中List、Dictionary、ArrayList、Hashtable和数组的区别是什么?
- ArrayList、List<T>、HashSet<T>、LinkedList<T>各自优点和缺点,Dictionary<K,V>的内部存储数据方式有什么特殊的?
- web service 数据传输有什么限制? 为什么?DataTable可以作为web service参数传递么?
- typedef struct的时候,为什么可以有两个名称,两个名称的区别?
- SenchaTouch2中list组件无法绑定存储或者绑定后仍旧无法显示数据问题解决
- 第2章 Java编程基础——FAQ2.11 int和Integer都可以作为整数类型, 那么它们有什么区别?
- GET和POST有什么区别?及为什么网上的多数答案都是错的。
- 在做app应用的时候,需要将数据提交到服务器去存储,那么方法可以参考如下
- c#中List、Dictionary、ArrayList、Hashtable和数组的区别是什么?
- c#中List、Dictionary、ArrayList、Hashtable和数组的区别是什么?
- 已知Oracle数据库有GD和ZS两个数据库,GD数据库v_s表有数据写入时,从v_s表中提取最新数据到ZS数据库的D_E表中。请问用什么办法解决这一问题?如果又碰到不能互访的问题时,又用什么办法解决?
- 两个常见问题: HashMap和Hashtable的区别 , ArrayList,Vector, LinkedList的存储性能和特性
- 在Oracle SQL中取数据时有时要用到in 和 exists 那么他们有什么区别呢?
- 类(class)和结构(struct)的区别是什么?它们对性能有影响吗?.NET BCL里有哪些是类(结构),为什么它们不是结构(类)?在自定义类型时,您如何选择是类还是结构?