繁体   English   中英

在没有java.lang.Map API的情况下迭代Hashtable条目的最佳方法是什么?

[英]What is the BEST way to iterate through Hashtable entries WITHOUT the java.lang.Map APIs?

我正在开发没有Collections API的BlackBerry j2me Java实现。 所以没有entrySet()方法或Map.Entry类。 循环遍历Hashtable映射的唯一可用方法是elements()keys()方法。

我可以期望elements()keys()以相同的顺序返回相同数量的映射吗? 如果是这样,我可以执行以下操作:

Enumeration keys = table.keys();
Enumeration elements = table.elements();
String key, value;
while(keys.hasMoreElements()) {
    key = keys.nextElement();
    value = elements.nextElement();
}

我认为情况确实如此,但文档并没有肯定地说。 如果我不能做出这个假设,那么我将只需要遍历密钥:

Enumeration keys = table.keys();
String key, value;
while(keys.hasMoreElements()) {
    key = keys.nextElement();
    // Less efficient b/c I have to do a lookup every time.
    value = table.get(key);
}

编辑:您可以假设只有一个线程可以访问该表。

他们保证返回相同数量的物品。 在Sun的实现中,键和值以相同的顺序返回。 (实际上,在同一个类中,同一个类用于迭代键,值或Map.Entry对象。)实际上,很难想象除了通过遍历桶之外以某种方式获取值。

但是,语言规范并没有说它们必须处于相同的顺序,所以如果你做出这个假设,你将会阻碍可移植性,并可能在以后引入难以发现的错误。 我认为正是算法专家唐纳德克努特说:“我们应该忘记效率不高,大约97%的时间说:过早的优化是所有邪恶的根源。” 除非代码的特定部分是一个巨大的瓶颈,否则我建议您对每个密钥进行查找。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM