containskeyHashMap和Hasptable的区别
containskey 时间:2021-06-13 阅读:(
)
C#Hashtable的ContainsKey方法,其中key是我自定义的一个类,包含几个属性
哈哈,这简单!这是你理解上的一个错误,hashtable是一个散列表,而其key只是起到了一个快速索引的做用,为什么你要定义一个新类呢?如果你想用hastable在存储你新建的类,那么你是有两种方案的。
第一,使用key类中的唯一值来区分,也就是所谓的,hashtable.add(key.key,key);这种方案可以将你的key某列属性值做为唯一索引。
可以很好地使用hashtable,而不是直接使用key做为索引。
相使用对象可以通过对象的属性来包含。
第二,上种方案的替代方案,就是自己构造对象,继承hashtable的接口。
原来hashtable的是继承以下接口:IDictionary,ICollection,IEnumerable,ISerializable,IDeserializationCallback,ICloneable,根据你的需要,你可以建立一个类也同样继承这么接口,或者只继承其中的部分接口。
如:程序中不需要使用copy功能,则不需要ICloneable接口,不需要进行序列化,则不需实现ISerializable接口,一般只继承前两个接口就可以了,这个等于你使用了一个自己建造的hashtable——其实hashtable实现的IDictionary才是hashtable的生要特性的。
然后你可以重写ContainsKey方法,想实现什么样的功能,你自己生成。
这种情况且是自己动手,丰衣足食的。
最后一点就是,为什么不把你的自定义为做为value呢?为什么非要做key,如果做value你可以考虑使用ContainsValue的方法去实现的。
是为了效率么?如果非让类做key,那么你的类能否序列化?如果没有实现序列化接口,那么自定义类做key是有占说不通的。
即便是实现凶,这样效果又如何呢?还是老老实实地按常规使用吧。
哈希值是什么?
哈希表类Hashtable
哈希表是一种重要的存储方式,也是一种常见的检索方法。
其基本思想是将关系码的值作为自变量,通过一定的函数关系计算出对应的函数值,把这个数值解释为结点的存储地址,将结点存入计算得到存储地址所对应的存储单元。
检索时采用检索关键码的方法。
现在哈希表有一套完整的算法来进行插入、删除和解决冲突。
在Java中哈希表用于存储对象,实现快速检索。
Java.util.Hashtable提供了种方法让用户使用哈希表,而不需要考虑其哈希表真正如何工作。
哈希表类中提供了三种构造方法,分别是:
publicHashtable()
publicHashtable(intinitialcapacity)
publicHashtable(intinitialCapacity,floatloadFactor)
参数initialCapacity是Hashtable的初始容量,它的值应大于0。
loadFactor又称装载因子,是一个0.0到1之间的float型的浮点数。
它是一个百分比,表明了哈希表何时需要扩充,例如,有一哈希表,容量为100,而装载因子为0.9,那么当哈希表90%的容量已被使用时,此哈希表会自动扩充成一个更大的哈希表。
如果用户不赋这些参数,系统会自动进行处理,而不需要用户操心。
Hashtable提供了基本的插入、检索等方法。
■插入
publicsynchronizedvoidput(Objectkey,alue)
给对象value设定一关键字key,并将其加到Hashtable中。
若此关键字已经存在,则将此关键字对应的旧对象更新为新的对象Value。
这表明在哈希表中相同的关键字不可能对应不同的对象(从哈希表的基本思想来看,这也是显而易见的)。
■检索
publicsynchronizedObjectget(Objectkey)
根据给定关键字key获取相对应的对象。
publicsynchronizedbooleancontainsKey(Objectkey)
判断哈希表中是否包含关键字key。
publicsynchronizedbooleancontains(alue)
判断value是否是哈希表中的一个元素。
■删除
publicsynchronizedobjectremove(objectkey)
从哈希表中删除关键字key所对应的对象。
publicsynchronizedvoidclear()
清除哈希表
另外,Hashtalbe还提供方法获取相对应的枚举集合:
publicsynchronizedEnumerationkeys()
返回关键字对应的枚举对象。
publicsynchronizedEnumerationelements()
返回元素对应的枚举对象。
例1.5Hashtable.java给出了使用Hashtable的例子。
例1.5Hashtalbe.java。
//importjava.lang.*;
importjava.util.Hashtable;
importjava.util.Enumeration;
lassHashApp{
publicstaticvoidmain(Stringargs[]){
Hashtablehash=newHashtable(2,(float)0.8);
//创建了一个哈希表的对象hash,初始容量为2,装载因子为0.8
hash.put("Jiangsu","Nanjing");
//将字符串对象“Jiangsu”给定一关键字“Nanjing”,并将它加入hash
hash.put("Beijing","Beijing");
hash.put("Zhejiang","Hangzhou");
System.out.println("Thehashtablehash1is:"+hash);
System.out.println("Thesizeofthishashtableis"+hash.size());
//打印hash的内容和大小
Enumerationenum1=hash.elements();
System.out.print("Theelementofhashis:");
while(enum1.hasMoreElements())
System.out.print(enum1.nextElement()+"");
System.out.println();
//依次打印hash中的内容
if(hash.containsKey("Jiangsu"))
System.out.println("ThecapatialofJiangsuis"+hash.get("Jiangsu"));
hash.remove("Beijing");
//删除关键字Beijing对应对象
System.out.println("Thehashtablehash2is:"+hash);
System.out.println("Thesizeofthishashtableis"+hash.size());
}
}
运行结果:
Thehashtablehash1is:{Beijing=Beijing,Zhejiang=Hangzhou,Jiangsu=Nanjing}
Thesizeofthishashtableis3
Theelementofhashis:BeijingHangzhouNanjing
ThecapatialofJiangsuisNanjing
Thehashtablehash2is:{Zhejiang=Hangzhou,Jiangsu=Nanjing}
Thesizeofthishashtableis2
Hashtable是Dictionary(字典)类的子类。
在字典类中就把关键字对应到数据值。
字典类是一个抽象类。
在java.util中还有一个类Properties,它是Hashtable的子类。
用它可以进行与对象属性相关的操作。
excelexportutil怎么用
⒈快速定义工作簿格式
首先选定需要定义格式的工作簿范围,单击“格式”菜单的“样式”命令,打开“样式”对话框;然后从“样式名”列表框中选择合适的“样式”种类,从“样式包括”列表框中选择是否使用该种样式的数字、字体、对齐、边框、图案、保护等格式内容;单击“确定”按钮,关闭“样式”对话框,Excel工作簿的格式就会按照用户指定的样式发生变化,从而满足了用户快速、大批定义格式的要求。
⒉快速复制公式
复制是将公式应用于其它单元格的操作,最常用的有以下几种方法:
一是拖动制复制。
操作方法是:选中存放公式的单元格,移动空心十字光标至单元格右下角。
待光标变成小实心十字时,按住鼠标左键沿列(对行计算时)或行(对列计算时)拖动,至数据结尾完成公式的复制和计算。
公式复制的快慢可由小实心十字光标距虚框的远近来调节:小实心十字光标距虚框越远,复制越快;反之,复制越慢。
也可以输入复制。
此法是在公式输入结束后立即完成公式的复制。
操作方法:选中需要使用该公式的所有单元格,用上面介绍的方法输入公式,完成后按住Ctrl键并按回车键,该公式就被复制到已选中的所有单元格。
还可以选择性粘贴。
操作方法是:选中存放公式的单元格,单击Excel工具栏中的“复制”按钮。
然后选中需要使用该公式的单元格,在选中区域内单击鼠标右键,选择快捷选单中的“选择性粘贴”命令。
打开“选择性粘贴”对话框后选中“粘贴”命令,单击“确定”,公式就被复制到已选中的单元格。
⒊快速显示单元格中的公式
如果工作表中的数据多数是由公式生成的,如果想要快速知道每个单元格中的公式形式,可以这样做:用鼠标左键单击“工具”菜单,选取“选项”命令,出现“选项”对话框,单击“视图”选项卡,接着设置“窗口选项”栏下的“公式”项有效,单击“确定”按钮。
这时每个单元格中的公式就显示出来了。
如果想恢复公式计算结果的显示,再设置“窗口选项”栏下的“公式”项失效即可。
⒋快速删除空行
有时为了删除Excel工作簿中的空行,你可能会将空行一一找出然后删除,这样做非常不方便。
你可以利用“自动筛选”功能来简单实现。
先在表中插入新的一行(全空),然后选择表中所有的行,选择“数据”菜单中的“筛选”,再选择“自动筛选”命令。
在每一列的项部,从下拉列表中选择“空白”。
在所有数据都被选中的情况下,选择“编辑”菜单中的“删除行”,然后按“确定”即可。
所有的空行将被删去。
插入一个空行是为了避免删除第一行数据。
⒌自动切换输入法
当你使用Excel 2000编辑文件时,在一张工作表中通常是既有汉字,又有字母和数字,于是对于不同的单元格,需要不断地切换中英文输入方式,这不仅降低了编辑效率,而且让人不胜其烦。
在此,笔者介绍一种方法,让你在Excel 2000中对不同类型的单元格,实现输入法的自动切换。
新建或打开需要输入汉字的单元格区域,单击“数据”菜单中的“有效性”,再选择“输入法模式”选项卡,在“模式”下拉列表框中选择“打开”,单击“确定”按钮。
选择需要输入字母或数字的单元格区域,单击“数据”菜单中的“有效性”,再选择“输入法模式”选项卡,在“模式”下拉列表框中选择“关闭(英文模式)”,单击“确定”按钮。
之后,当插入点处于不同的单元格时,Excel 2000能够根据我们进行的设置,自动在中英文输入法间进行切换。
就是说,当插入点处于刚才我们设置为输入汉字的单元格时,系统自动切换到中文输入状态,当插入点处于刚才我们设置为输入数字或字母单元格时,系统又能自动关闭中文输入法。
⒍自动调整小数点
如果你有一大批小于1的数字要录入到Excel工作表中,如果录入前先进行下面的设置,将会使你的输入速度成倍提高。
单击“工具”菜单中的“选项”,然后单击“编辑”选项卡,选中“自动设置小数点”复选框,在“位数”微调编辑框中键入需要显示在小数点右面的位数。
在此,我们键入“2”单击“确定”按钮。
完成之后,如果在工作表的某单元格中键入“4”,则在你按了回车键之后,该单元格的数字自动变为“0.04”。
方便多了吧!此时如果你在单元格中键入的是“8888”,则在你结束输入之后,该单元格的数字自动变为“88.88”。
⒎用“记忆式输入”
有时我们需要在一个工作表中的某一列输入相同数值,这时如果采用“记忆式输入”会帮你很大的忙。
如在职称统计表中要多次输入“助理工程师”,当第一次输入后,第二次又要输入这些文字时,只需要编辑框中输入“助”字,Excel2000会用“助”字与这一列所有的内容相匹配,若“助”字与该列已有的录入项相符,则Excel2000会将剩下的“助理工程师”四字自动填入。
按下列方法设置“记忆式输入”:选择“工具”中的“选项”命令,然后选择“选项”对话框中的“编辑”选项卡,选中其中的“记忆式键入”即可。
⒏用“自动更正”方式实现快速输入
使用该功能不仅可以更正输入中偶然的笔误,也可能把一段经常使用的文字定义为一条短语,当输入该条短语时,“自动更正”便会将它更换成所定义的文字。
你也可以定义自己的“自动更正”项目:首先,选择“工具”中的“自动更正”命令;然后,在弹出的“自动更正”对话框中的“替换”框中键入短语“爱好者”,在“替换为”框中键入要替换的内容“电脑爱好者的读者”;最后,单击“确定”退出。
以后只要输入“爱好者”,则整个名称就会输到表格中。
⒐用下拉列表快速输入数据
如果你希望减少手工录入的工作量,可以用下拉表来实现。
创建下拉列表方法为:首先,选中需要显示下拉列表的单元格或单元格区域;接着,选择菜单“数据”菜单中的“有效性”命令,从有效数据对话框中选择“序列”,单击“来源”栏右侧的小图标,将打开一个新的“有效数据”小对话框;接着,在该对话框中输入下拉列表中所需要的数据,项目和项目之间用逗号隔开,比如输入“工程师,助工工程师,技术员”,然后回车。
注意在对话框中选择“提供下拉箭头”复选框;最后单击“确定”即可。
HashMap和Hasptable的区别
1 HashMap不是线程安全的
hastmap是一个接口 是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。
HashMap允许null key和null value,而hashtable不允许。
2 HashTable是线程安全的一个Collection。
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。
因为contains方法容易让人引起误解。
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差
public static void main(String args[]) {
HashTable h=new HashTable();
h.put("用户1",new Integer(90));
h.put("用户2",new Integer(50));
h.put("用户3",new Integer(60));
h.put("用户4",new Integer(70));
h.put("用户5",new Integer(80));
Enumeration e=h.elements();
while(e.hasMoreElements()){ System.out.println(e.nextElement()); }
racknerd发表了2021年美国独立日的促销费用便宜的vps,两种便宜的美国vps位于洛杉矶multacom室,访问了1Gbps的带宽,采用了solusvm管理,硬盘是SSDraid10...近两年来,racknerd的声誉不断积累,服务器的稳定性和售后服务。官方网站:https://www.racknerd.com多种加密数字货币、信用卡、PayPal、支付宝、银联、webmoney,可以付...
3C云国内IDC/ISP资质齐全商家,与香港公司联合运营, 已超6年运营 。本次为大家带来的是双12特惠活动,香港美国日本韩国|高速精品|高防|站群|大带宽等产品齐全,欢迎咨询问价。3C云科技有限公司官方网站:http://www.3cccy.com/客服QQ:937695003网页客服:点击咨询客户QQ交流群:1042709810价目表总览升级内存 60元 8G内存升级硬盘 1T机械 90元 2...
云雀云(larkyun)当前主要运作国内线路的机器,最大提供1Gbps服务器,有云服务器(VDS)、也有独立服务器,对接国内、国外的效果都是相当靠谱的。此外,还有台湾hinet线路的动态云服务器和静态云服务器。当前,larkyun对广州移动二期正在搞优惠促销!官方网站:https://larkyun.top付款方式:支付宝、微信、USDT广移二期开售8折折扣码:56NZVE0YZN (试用于常州联...
containskey为你推荐
GoldenDBGolden Hind中文什么意思 好像是一个人名或地点之类的词身份证正反面图片身份证正反两面的照片能做什么应用雷达雷达有什么用途知识分享平台微信看到一些文章,可以分享到知识付费的平台吗?怎么操作呀?搜索引擎的概念什么是搜索引擎?搜索引擎是如何工作的?seo优化技术SEO技术是什么?star413匡威jack star 的后标是不是真的?如图鄂n鄂A鄂B鄂C鄂D鄂E鄂F鄂G鄂H鄂J鄂K鄂L鄂M鄂N鄂P鄂Q鄂R鄂S鄂T鄂U分别代表湖北省的哪些城市什么是生态系统生态系统的结构是什么网络电话免费版有没有免费的网络电话?纯免费的
域名空间购买 便宜vps blackfriday 鲨鱼机 512m ev证书 嘟牛 e蜗牛 新家坡 秒杀汇 腾讯实名认证中心 100mbps idc查询 国外ip加速器 双线asp空间 国外在线代理服务器 万网空间 阿里云邮箱登陆地址 空间服务器 免费网络空间 更多