Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在没有java.lang.Map API的情况下,迭代哈希表条目的最佳方法是什么?_Java_Blackberry_Hashtable - Fatal编程技术网

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

在没有java.lang.Map API的情况下,迭代哈希表条目的最佳方法是什么?,java,blackberry,hashtable,Java,Blackberry,Hashtable,我正在开发一个没有Collections API的BlackBerry j2me Java实现。因此没有entrySet()方法或Map.Entry类。迭代哈希表的映射的唯一可用方法是元素()和键()方法 我能期望elements()和keys()以相同的顺序返回相同数量的映射吗?如果是,我可以做以下工作: Enumeration keys = table.keys(); Enumeration elements = table.elements(); String key, value; wh

我正在开发一个没有Collections API的BlackBerry j2me Java实现。因此没有
entrySet()
方法或
Map.Entry
类。迭代
哈希表的映射的唯一可用方法是
元素()
键()
方法

我能期望
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对象。)事实上,很难想象除了通过迭代存储桶之外,还可以通过其他方式获得值


然而,语言规范并没有规定它们的顺序必须相同,因此如果您做出这样的假设,您将阻碍可移植性,并可能在以后引入难以发现的bug。我想是算法专家Donald Knuth说的,“我们应该忘记小效率,比如说97%的时间:过早优化是万恶之源。”除非代码的特定部分是一个巨大的瓶颈,否则我建议您查找每个键。

大部分同意。但是,由于这是一个只支持黑莓的应用程序,而且其实现已经很成熟,所以可移植性和前向兼容性就不那么重要了。我通常是老克努斯名言的粉丝,但人们确实把它作为无知的借口。如果我知道一种方法更好,那么我没有理由不在第一次做正确的方法。我在我们的代码库中找到了另一个地方,我们依赖于这个假设,它是有效的,所以我将继续使用它。同时请记住,您编写的代码是供程序员阅读的。即使这种关系成立,它也不是众所周知的,未来的开发人员也很难理解。哈希表在查找键方面很快——事实上是常数时间——因此使用这两个枚举数所节省的成本并不高,除非这是一段非常热门的代码,与未来代码更改的混乱情况相比。事实上,我发现第一个更容易阅读。这就像,“好吧,我从这个表中获取所有的键和值,现在我对它们进行迭代。很简单。”所以我想这只是个人偏好。