我担心哪种方法更好,Map.Entry
或map.get(key)
,行的结构为List
for (Map<String, Object> row : rows) {
Object stock = row.get("stock");
}
另一个:
for (Map<String, Object> row : rows) {
for (Map.Entry<String, Object> cell : row.entrySet()) {
if (cell.getKey().equals("stock")) {
Object stock = cell.getValue();
}
}
}
哪个更好?
还有一个我很好奇的问题,我只知道一些键名,但不是全部,我想从映射中获取所有值,该怎么办?顺便说一句,我不想使用entrySet迭代器方法。
for (Map<String, Object> row : rows) {
Object stock = row.get("stock");
Object itemId = row.get("itemid");
Object modelId = row.get("modelid");
// todo
// how to get other values that I don't know the key name String}
答案 0 :(得分:3)
第一个代码段更好,因为您似乎只需要单个键的值。
使用row.get("stock")
将花费恒定(O(1)
)的预期时间。
另一方面,迭代entrySet
并将每个Map.Entry
的密钥与所需密钥进行比较,将花费线性(O(n)
)时间,这比Map
大时的第一个代码段。
仅在需要处理entrySet
的所有条目时,才应遍历整个Map
。
答案 1 :(得分:3)
哪个更好?
通常,在编程中,没有通用性更好。事物总是取决于上下文。
已经说过,在编写代码时,您要努力以最少的代码(易于阅读和理解)来“做需要做的事情”。
从这个角度来看,您的第一个选择是明确的赢家。它可以完成工作,更易于阅读和维护(主要是因为您只看很少的代码)。作业所在的位置:遍历映射中的所有条目,并对每个值进行操作。
从“语义”的角度来看,这两个选项“做同样的事情”,因此它们几乎是等效的,我真的想不出一个示例,其中两个选项的行为不同(除了在运行时使用不同的 cost ,请参见其他答案)。