我正在开发没有 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 对象。)确实,很难想象除了遍历存储桶以外的其他方式获取值。
但是,语言规范并没有说它们必须以相同的顺序排列,所以如果您做出这样的假设,您将阻碍可移植性并可能在以后引入难以发现的错误。我认为是算法专家 Donald Knuth 说过,“我们应该忘记效率低下,大约 97% 的时间:过早优化是万恶之源。”除非代码的那个特定部分是一个巨大的瓶颈,否则我建议您对每个键进行查找。
关于java - 在没有 java.lang.Map API 的情况下迭代哈希表条目的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4556141/