`

Hashtable啊Hashtable今天载到在你手里了!

阅读更多

今天整个上午都在调试一个程序,我就纳了闷了,NND,为什么我明明把ip存进内存 了,重复查询的时候还是去硬盘?

调啊调都没看明白,后来一看JDK才明白,娘西皮滴!

  原来Hashtable的contains(Object),指的是是否包含value而不是key!!!

  竟然和Map的containsValue(Object value)在功能上是一样的。吃里爬外的方法!
  汗的教训哪!!
       

分享到:
评论
25 楼 weng 2011-06-15  
<p>
</p>
<div style="color: #000000; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; background-color: #ffffff; margin: 8px;">
<div class="quote_title" style="font-weight: bold; margin-top: 5px; margin-right: 0px; margin-bottom: 0px; margin-left: 15px; padding: 5px;">dotjar 写道</div>
<div class="quote_div" style="margin-top: 0px; margin-right: 5px; margin-bottom: 5px; margin-left: 15px; background-color: #fafafa; padding: 3px; border: 1px solid #cccccc;">
<p style="margin: 0px;"><span style="color: #99cc00; font-size: medium;">今天整个上午都在调试一个程序,我就纳了闷了,NND,为什么我明明把ip存进内存 了,重复查询的时候还是去硬盘?</span></p>
<p style="margin: 0px;"><span style="color: #99cc00; font-size: medium;">调啊调都没看明白,后来一看JDK才明白,娘西皮滴!</span></p>
<p style="margin: 0px;"><span style="color: #99cc00; font-size: medium;">  原来Hashtable的contains(Object),指的是是否包含value而不是key!!!</span></p>
<p style="margin: 0px;"><span style="color: #99cc00; font-size: medium;">  竟然和Map的containsValue(Object value)在功能上是一样的。吃里爬外的方法!<br>  <img style="" src="/images/smiles/icon_cry.gif" alt=""> 汗的教训哪!!<br>       </span></p>
<div><span style="color: #99cc00; font-size: medium;"><br></span></div>
</div>
</div>
<br>Hashtable很少用了,木在项目里面用过
<p> </p>
24 楼 dotjar 2011-04-20  
langyu 写道
从代码看,好像是历史问题造成的。Java 1.0版本是使用contains()方法,在1.2版本才引入 Java Collections Framework,抽象了Map接口。此接口中包含containsKey()与containsValue()方法,因为有功能的重复,所以Hashtable的containsValue()只是内部自己处理了下,尽管方法声明上有提示,但还是会造成我们的误解,这样不好

我只是觉得为什么Hashtable里既然有了containsKey和containsValue为什么还要加一个contains方法且功能和containsValue一样呢?
23 楼 bmqnc 2011-02-22  
多看看api doc很重要,其实很多问题java的api doc中都写得很清楚,我之前就碰到一个关于api设计的问题也很纠结,后来也是详细的看了之后才明白的。

如果再不懂,我觉得可以可以看源代码的,况且jdk的源代码是open source的,侯捷说的好啊:源码面前,了无秘密。

所以我觉得有机会还是多看看源码是必要的,即便看不懂,看看代码的coding style也是很好的,我看云风有时也是这么干的。^_^。。。。
22 楼 captmjc 2011-02-21  
thihy 写道
smaxpp 写道
应该用HashMap嘛,containsKey, containsValue.更明确


HashTable也有ontainsKey方法。只是楼主一不看JavaDoc,二不用Map接口抽象。



同感。API可能容易忽略。但是如果养成
Map<...> map = new Hashtable<...>
而不是
Hashtable .... = ....
的习惯,就不会出现这个问题了。
21 楼 thihy 2011-02-21  
smaxpp 写道
应该用HashMap嘛,containsKey, containsValue.更明确


HashTable也有ontainsKey方法。只是楼主一不看JavaDoc,二不用Map接口抽象。
20 楼 smaxpp 2011-02-21  
应该用HashMap嘛,containsKey, containsValue.更明确
19 楼 lucane 2011-02-21  
高手说
不要用不常用的方法
如果不得不用,一定要仔细阅读文档
仔细进行测试
18 楼 NanguoCoffee 2011-02-21  
sdh5724 写道
编码的时候, 最好把JDK 的DOC/SRC 都纳入到ECLIPSE的设置里去。  基本上, 这样就能很清晰的理解API的作用了。  我基本如果不是很确定一个方法的调用, 我会打开对应的类详细阅读一次。 JDK因为历史的因素, 个别方法名字似乎不是那么能确切解释方法的含义。  在编码的时候, 我比较鼓励同时适当阅读JDK的代码, 这习惯能让你收益颇多。


源码才是王道!!!
有极大部分的人不会阅读源码的。
就知道拿着中文版的API doc来看,不知道这玩意儿能看得出啥?

17 楼 sam_kee 2011-02-20  
我之前用List,其中的方法contains(Object obj)也是啊,虽然两个对象内容相同,但是依然不存在
16 楼 sdh5724 2011-02-20  
编码的时候, 最好把JDK 的DOC/SRC 都纳入到ECLIPSE的设置里去。  基本上, 这样就能很清晰的理解API的作用了。  我基本如果不是很确定一个方法的调用, 我会打开对应的类详细阅读一次。 JDK因为历史的因素, 个别方法名字似乎不是那么能确切解释方法的含义。  在编码的时候, 我比较鼓励同时适当阅读JDK的代码, 这习惯能让你收益颇多。
15 楼 玲cc 2011-02-20  
有点晕,从来不用hashtable
14 楼 key_hua 2011-02-19  
hashtable 没玩过,啥时候用
13 楼 洪帮主 2011-02-19  
楼主果断牛逼,我都没用过HashTable,什么项目居然会用到?
12 楼 totong 2011-02-19  
不推荐使用了就不要用了嘛,使用Collections里面的方法来同步
11 楼 onlylau 2011-02-19  
记得Hashtable与HashMap之间的区别之一就是这两个方法的不同

好像有这样的一个java笔试题是这样的
10 楼 shhbobby 2011-02-18  
标记一下,以后自己也要注意
9 楼 bxj0702 2011-02-18  
NanguoCoffee 写道
bxj0702 写道
boolean contains(Object value)
          测试此映射表中是否存在与指定值关联的键。
boolean containsValue(Object value)
          如果此 Hashtable 将一个或多个键映射到此值,则返回 true。

改天仔细看看这两个方法的区别。


要这么看?
public boolean containsValue(Object value) {
	return contains(value);
    }




8 楼 steafler 2011-02-18  
经验问题啊
7 楼 抢街饭 2011-02-18  
最近我也在看这东西
一个是Contains(object key),一个是ContainsKey(object key),就不知道用哪个才对,后来查了资料才知道,其实这两个方法实现的功能是一样的,都是判断哈希表中是否包含指定的键。

它们的源码是这样的:

public virtual bool Contains(object key)
{
    return this.ContainsKey(key);
}
6 楼 mencius 2011-02-18  
hashtable不是已经不推荐使用了吗

相关推荐

    C# json 转hashtable

    总之,C#中将JSON字符串转换为`Hashtable`以及反之的过程涉及到了JSON序列化和反序列化的概念,这在开发与Web服务交互的应用程序时尤其重要。虽然`Hashtable`在现代.NET应用中已经较少使用,但了解如何在JSON和`...

    WinFormHashTable最简单用法,.net hashtable ,hashtable ,hashtable用法

    在WinForm应用程序中,我们可能会利用Hashtable来管理各种对象,尤其是在需要高效查找和操作数据时。下面将详细介绍WinForm中使用Hashtable的基本概念、用法及其优势。 1. **什么是Hashtable** Hashtable是System....

    HashTable

    在计算机科学中,哈希表(HashTable)是一种数据结构,它实现了关联数组的抽象数据类型,能够快速地进行查找、插入和删除操作。哈希表通过将键(Key)映射到表中的一个位置来访问记录,从而实现了快速访问。本文将...

    HashMap和HashTable的区别和不同

    - 当负载因子超过0.75时,`HashTable`也会进行扩容,但其扩容策略是将容量扩大到原容量的两倍加一(`2 * oldCapacity + 1`)。这种方法在某些情况下可能不如`HashMap`的扩容策略高效。 #### 4. 性能对比 - **...

    asp.net遍历hashtable

    在ASP.NET中,Hashtable是一种常用的数据结构,它是一个键值对集合,允许程序员存储和检索对象。本篇文章将深入探讨如何在ASP.NET中遍历Hashtable,以及相关的重要知识点。 首先,理解Hashtable的基本概念至关重要...

    hashtable存储数据.rar

    在Java编程语言中,`Hashtable`是一个非常基础且重要的数据结构,它属于集合框架的一部分,提供了键值对(key-value pairs)的存储功能。`Hashtable`类是线程安全的,意味着在多线程环境下,它能确保数据的一致性和...

    hashMap和hashTable的区别

    - **HashTable**:是早期的 Java 集合框架的一部分,可以追溯到 Java 1.0 版本。 7. **其他方法**: - **HashMap**:提供了 `containsKey`, `containsValue`, `putIfAbsent` 等方法。 - **HashTable**:提供了 `...

    C#-Hashtable应用

    此外,Hashtable不是线程安全的,如果你需要在多线程环境中使用,需要额外的同步措施,例如使用lock关键字。或者,可以选择使用ConcurrentDictionary,它是.NET Framework中线程安全的键值对集合。 总结来说,C#的...

    java Hashtable的泛型化

    在早期的Java版本中,`Hashtable`并没有直接支持泛型,这意味着你可以在其中存储任何类型的键(`Object`)和值(`Object`),这可能导致类型安全问题,比如在使用时进行强制类型转换。然而,随着Java 5的发布,泛型...

    HashMap和HashTable底层原理以及常见面试题

    HashMap和HashTable底层原理以及常见面试题 HashMap和HashTable是Java中两个常用的数据结构,都是基于哈希表实现的,但它们之间存在着一些关键的区别。本文将深入探讨HashMap和HashTable的底层原理,并总结常见的...

    HashMap与HashTable区别

    在Java编程语言中,`HashMap`和`HashTable`是两种非常重要的数据结构,它们都实现了`Map`接口,并提供了键值对的存储方式。这两种数据结构虽然相似,但在实现细节和使用场景上存在显著差异。下面将详细介绍`HashMap`...

    hashtable和hashmap的区别

    在Java编程语言中,`Hashtable`和`HashMap`是两种非常重要的数据结构,它们都实现了`Map`接口,用于存储键值对。尽管它们有着相似的功能,但在实现细节和应用场景上存在显著差异。接下来,我们将详细探讨`Hashtable`...

    hashmap与hashtable区别

    如果尝试将null作为键或值插入到`Hashtable`中,则会抛出`NullPointerException`。 - **HashMap**:允许键或值为null。对于键而言,每个`HashMap`实例只允许有一个键为null的条目;对于值而言,可以有多个键对应的值...

    在J2ME环境下把JSON解析为Hashtable

    【JSON解析为Hashtable在J2ME环境中的应用】 在Java ME(J2ME)环境中,由于资源限制,我们不能直接使用Java SE中的HashMap或ArrayList。在这种情况下,使用Hashtable和Vector作为数据容器是理想的选择,因为它们是...

    HashTable的java实现

    在Java编程语言中,哈希表(HashTable)是一种常见的数据结构,它提供了高效的数据存储和检索功能。哈希表基于哈希函数将键(Key)映射到数组的索引位置,通过键值对(Key-Value Pair)来存储数据。这种数据结构允许...

    hashtable序列化与反序列化

    在上面的代码中,`writeObject()`方法会将`myHashTable`对象转换为字节流并写入到`hashTable.ser`文件中。 接下来,我们讨论反序列化,即从序列化的形式恢复对象。反序列化是将字节流转换回原来的对象状态的过程。...

    C# .net HashTable

    `HashTable`是非线程安全的,如果你需要在多线程环境中使用,应使用`ConcurrentDictionary`类代替。此外,`Hashtable`在.NET Framework 4.0及以后版本中已被弃用,推荐使用`Dictionary, TValue&gt;`。 10. **比较与...

    HashMap与HashTable和HashSet的区别

    当需要添加元素时,`HashTable`会根据键的哈希码将其放置到相应的位置上;查找元素时,同样利用键的哈希码快速定位。 **特点:** - **线程安全性**:`HashTable`的所有方法都是同步的,因此它是线程安全的。 - **...

    哈希表hashtable实现

    在“hashtable.c”和“hashtable.h”中,很可能采用了链地址法,即每个数组元素实际上是一个链表的头节点,相同哈希值的元素会被链接在一起。 3. 插入操作:当向哈希表中插入元素时,首先计算键的哈希值,然后在...

    使用哈希表Hashtable填充ListBox

    在IT行业中,哈希表(HashTable)是一种常用的数据结构,它提供了一种高效的方式来存储和检索数据。在.NET框架中,`Hashtable`是System.Collections命名空间下的一个类,它实现了键值对(Key-Value Pair)存储,允许...

Global site tag (gtag.js) - Google Analytics