java Hashtable的查询效率真高
haohao提了一个问题,给人第一感觉是要作1000万*100万,即10万亿次的查找运算,有些吓人。因此,haohao说,要“分析时间复杂度和空间复杂度”。
我对算法是外行,只有些二分查找的概念。
数组,二分查找。
后来想,java 已经10多岁了,我能想到的这些简单的算法,java早就封装得很好了。比如,Hashtable,查找效率如何呢?
copy一个小程序测测:

ackage zdu.filter;

import java.util.*;

public class TestHashtable {

public static void main(String[] args) {
   Hashtable aHashtable=new Hashtable();
   Vector aVector=new Vector();
  
      long t1 = System.currentTimeMillis();
   System.out.println("开始::"+t1);
   for(int i=0;i<1000000;i++){
     aVector.addElement(
"论语"+i);  
     aHashtable.put(aVector.get(i),i);
   }
   long t2 = System.currentTimeMillis();
   System.out.println(
"数据准备完毕:"+t2);
     long t3 = t2-t1;
   System.out.println(
"数据准备用时:"+t3+"毫秒");
   long t4 = System.currentTimeMillis();
  
   System.out.println(
"Key:"+aHashtable.get("论语556677"));
   System.out.println(
"Key2:"+aHashtable.get("论语116677"));
   System.out.println(
"Key3:"+aHashtable.get("论语886633"));
   System.out.println(
"Key4:"+aHashtable.get("论语336655"));
   System.out.println(
"Key5:"+aHashtable.get("论语96633"));
   long t5 = System.currentTimeMillis();
       long t6 = t5-t4;
   System.out.println(
"查找用时:"+t6+"毫秒");
}

}

在eclipse里直接run一下,结果吓我一跳:
开始::1179339369314
数据准备完毕:1179339371227
数据准备用时:1913毫秒
Key:556677
Key2:116677
Key3:886633
Key4:336655
Key5:96633
查找用时:1毫秒

在100万记录中任意查5条,竟然总共用了不到1毫秒。
内存?几乎没有可以感觉到的消耗。
空间复杂度与时间复杂度,对100万条记录的查询,根本不是问题。

hofman   2007-05-17 02:47:29 评论:6   阅读:1409   引用:0
@2008-04-28 16:03:41  游客
   1.5????????int
@2008-03-18 21:11:15  游客
   hashtable本来复杂度只有O(1),这不是查找,是直接计算定位
回3.5的网友 @2008-03-05 22:30:38  hofman
   第一,Vector1.42 ,1.50有get(int)这种方法了,至于更早是否有,没查。
第二,本文Hashtable的put方法,put的并非基本数据类型,而是从aVector.get(int)返回的object.
第三,编译当然是通过了,不然我怎么能运行它?
@2008-03-05 16:57:02  游客
第一:Vector什么时候有了get(int)这种方法了?
第二:Hashtable的put方法,什么时候开始接受基本数据类型了?

楼主这代码编译通过了吗?
@2007-05-22 11:15:23  hofman
aVector.addElement("论语"+i);  // 在 aVector 中增加第i个成员对象,就是"论语"+i这个String.    aHashtable.put(aVector.get(i),i); // 在aVector中取出刚存放的第i个成员对象,就是"论语"+i这个String,并置入aHashtable中。
@2007-05-22 11:02:00  游客
aHashtable.put(aVector.get(i),i);
怎么过去的??

发表评论>>

署名发表(评论可管理,不必输入下面的姓名)

姓名:

主题:

内容: 最少15个,最长1000个字符

验证码: (如不清楚,请刷新)

2003-2007@copyright