要遍历一个Hashtable,api中提供了如下几个方法可供我们遍历:

  keys() - returns an Enumeration of the keys of this Hashtable

  keySet() - returns a Set of the keys

  entrySet() - returns a Set of the mappings

  elements() - returns an Enumeration of the values of this Hashtable

4种方法,那种更好呢,写段代码来比较一下吧:
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map.Entry;
public class HashtableTest
{
     public static void main(String[]
args) {
           long start
= 0;
           long end
= 0;
          
          Hashtable<String, String> table = new Hashtable<String,
String>();
           forint i
= 0; i < 1000000; i++) {
              table.put( "key:" +
i, "value:" + i);
          }
          
           //1、使用keys()
          start = System. currentTimeMillis();
          Enumeration<String> en1 = table.keys();
           while(en1.hasMoreElements())
{
              en1.nextElement();
          }
          end = System. currentTimeMillis();
          System. out.println( "Enumeration
keys costs " + (end - start) + " milliseconds" );
          
           //2、使用elements()
          start = System. currentTimeMillis();
          Enumeration<String> en2 = table.elements();
           while(en2.hasMoreElements())
{
              en2.nextElement();
          }
          end = System. currentTimeMillis();
          System. out.println( "Enumeration
elements costs " + (end - start) + " milliseconds" );
          
           //3、使用keySet()
          start = System. currentTimeMillis();
          Iterator<String> it1 = table.keySet().iterator();
           while(it1.hasNext())
{
              it1.next();
          }
          end = System. currentTimeMillis();
          System. out.println( "Iterator
keySet costs " + (end - start) + " milliseconds" );
          
           //4、使用entrySet()
          start = System. currentTimeMillis();
          Iterator<Entry<String, String>> it2 = table.entrySet().iterator();
           while(it2.hasNext())
{
              it2.next();
          }
          end = System. currentTimeMillis();
          System. out.println( "Iterator
entrySet costs " + (end - start) + " milliseconds" );
     }
}
运行结果如下:
Enumeration keys costs 16 milliseconds
Enumeration elements costs 15 milliseconds
Iterator keySet costs 17 milliseconds
Iterator entrySet costs 16 milliseconds
通过运行结果显示,在如今jdk的版本下,两者差距不是很大,不过使用Enumeration去遍历会稍微快一些。

关于HashTable的遍历方法解析的更多相关文章

  1. Hashtable类中的四种遍历方法对比

    要遍历一个Hashtable,api中提供了如下几个方法可供我们遍历: keys() - returns an Enumeration of the keys of this Hashtable ke ...

  2. Python的方法解析顺序(MRO)[转]

    本文转载自: http://hanjianwei.com/2013/07/25/python-mro/ 对于支持继承的编程语言来说,其方法(属性)可能定义在当前类,也可能来自于基类,所以在方法调用时就 ...

  3. sqlalchemy mark-deleted 和 python 多继承下的方法解析顺序 MRO

    sqlalchemy mark-deleted 和 python 多继承下的方法解析顺序 MRO 今天在弄一个 sqlalchemy 的数据库基类的时候,遇到了跟多继承相关的一个小问题,因此顺便看了一 ...

  4. Hashtable 数据遍历的几种方式

    Hashtable 在集合中称为键值对,它的每一个元素的类型是 DictionaryEntry,由于Hashtable对象的键和值都是Object类型,决定了它可以放任何类型的数据, 下面我就把Has ...

  5. Method Resolution Order – Python类的方法解析顺序

    在支持多重继承的编程语言中,查找方法具体来自那个类时的基类搜索顺序通常被称为方法解析顺序(Method Resolution Order),简称MRO.(Python中查找其它属性也遵循同一规则.)对 ...

  6. ES6 数组遍历方法的实战用法总结(forEach,every,some,map,filter,reduce,reduceRight,indexOf,lastIndexOf)

    目录 forEach every some map filter reduce && reduceRight indexOf lastIndexOf 前言 ES6原生语法中提供了非常多 ...

  7. List,Set,Map集合的遍历方法

    List的三种实现:ArrayList(数组)  LinkedList(链表)  Vector(线程安全) List集合遍历方法: List<String> list = new Arra ...

  8. JS数组与对象的遍历方法大全

    本文简单解析各种数组和对象属性的遍历方法: 原生for循环.for-in及forEach ES6 for-of方法遍历类数组集合 Object.key()返回键名的集合 jQuery的$.each() ...

  9. python 方法解析顺序 mro

    一.概要: mor(Method Resolution Order),即方法解析顺序,是python中用于处理二义性问题的算法 二义性: 1.两个基类,A和B都定义了f()方法,c继承A和B那么C调用 ...

随机推荐

  1. Python SQLAlchemy --1

    本文為 Python SQLAlchemy ORM 一系列教學文: SQLAlchemy 大概是目前 Python 最完整的資料庫操作的套件了,不過最令人垢病的是它的文件真的很難閱讀,如果不搭配個實例 ...

  2. ubuntu 15 安装cuda,开启GPU加速

    1 首先要开启GPU加速就要安装cuda.安装cuda,首先要安装英伟达的驱动.ubuntu有自带的开源驱动,首先要禁用nouveau.这儿要注意,虚拟机不能安装ubuntu驱动.VMWare下显卡只 ...

  3. Shell基础-ech0,cat,history,alias,unalias,bash快捷键,wc,执行结果写入文件

    1 系统所支持的shell存放于 /etc/shells 文件中,shell脚本的开头 #!/bing/bash 是指定使用的脚本类型 不能省略,省略之后有些文件可以执行,但容易出错 这行不是注释 2 ...

  4. Asp.Net MVC4入门指南(9):查询详细信息和删除记录

    在本教程中,您将查看自动生成的Details和Delete方法. 查询详细信息和删除记录 打开Movie控制器并查看Details方法. public ActionResult Details(int ...

  5. sql通用的存储过程

    QUOTED_IDENTIFIER ON GO ALTER proc [dbo].[UpPagerSingle] @ReturnFields Varchar(500)='*',--搜索表的字段,比如: ...

  6. city-picker 选择省市县的一个控件,好用。

    我觉得好奇怪,这么好一个插件,为什么没有设置值的方法,还是我才疏学浅?? 我看有的人做法是把,把源代码里面的自动扫描机制注释掉 // $(function () { // $('[data-toggl ...

  7. arch linux 安装 之 ---GPT--引导篇

    新入一二手X240 ,直接格式化,装archLinux. 一.引导程序安装--------------- 1.首先搞清楚什么是UEFI Under UEFI下的引导顺序 System switched ...

  8. git使用--git命令项目提交问题总结

    提交遇到Error  "remote ref does not exist"解决办法:git fetch -p MY_REMOTE    eg.    git fetch -p o ...

  9. Linux下使用Eclipse开发Hadoop应用程序

    在前面一篇文章中介绍了如果在完全分布式的环境下搭建Hadoop0.20.2,现在就再利用这个环境完成开发. 首先用hadoop这个用户登录linux系统(hadoop用户在前面一篇文章中创建的),然后 ...

  10. QQ邮箱发送邮件,出现mail from address must be same as authorization user错误

    之前做的一个系统,有个发送邮件的功能,一直能正常使用,今天同事说QQ邮箱发送不了. 立马着手调试,发现服务器一直出现“mail from address must be same as authori ...