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
分享到:
相关推荐
python教程学习
tdac034.pdf
veclibm111111111111
nssm工具,进行2次解压后即可
视讯镜头优化,操作不走
【数据结构】的资源,包括书籍、在线课程和网站
北京大学-DeepSeek系列-提示词工程和落地场景.pdf.png
【财信国际经济研究院-2025研报】2025年2月CPI和PPI数据点评:通胀低于预期,内需亟待提振.pdf
【毕业设计】java-springboot+vue精品在线试题库系统源码(完整前后端+mysql+说明文档+LunW).zip
python安装-25.求 a 的 b 次方——有点不好意思哈.py
代码实现了自适应IMM(交互式多模型)算法,专注于对目标状态进行估计,并结合了匀速(CV)和匀加速(CA)运动模型。它使用自适应观测噪声估计和扩展卡尔曼滤波器(EKF)作为滤波主体,并在最后提供误差统计特性输出。
中产品工业物联网联网的基础功能,是企业开启数字化转型的入门之选。它能帮助企业快速搭建起基础的设备数据采集与监控体系,以较低成本实
北京大学DeepSeek系列-DeepSeek与AIGC应用.pdf.png
【毕业设计-java】springboot-vue基于多维分类的知识管理系统实现源码(完整前后端+mysql+说明文档+LunW).zip
## 一、数据介绍 本数据参考C刊《管理评论》佟岩(2024)老师的做法,使用各年度省级政府工作报告中“减碳”关键词的词频总数来测度地方政府对“减碳”的重视程度,“减碳”关键词包括二氧化碳、低碳、减排、节能、能耗、环境保护(环保)、生态、绿色。 本数据包含:原始数据、参考文献、代码do文件、最终结果。 ## 二、参考文献: 佟岩,李鑫,徐国铨.企业集团碳减排压力与债务分布-来自高耗能上市公司的经验证据[J].管理评论,2024,36(02):210-221.DOI:10.14120/j.cnki.cn11-5057/f.2024.02.014 ## 三、相关数据:城市、城市编码、年份、减碳重视程度词频。
python教程学习
jfinal-undertow 用于开发、部署由 jfinal 开发的 web 项目
python学习一些项目和资源
锐捷设备命令最全大合集
uniapp-machine-learning-from-scratch-05.rar