【发布时间】:2014-03-23 22:57:11
【问题描述】:
我有一个对象列表List<Field> fieldList 和一个字符串列表List<String> fieldNameList。
fieldList 中的每个 Field 对象由字符串 filedName 和各种属性组成。
迭代fieldList 并按照fieldNameList 的顺序访问其属性的最佳方法是什么?
例如,
fieldList:[name, color, size]
包含:
[field1, red, 10] [field2, yellow, 8] [filed3, green, 9] [field4, blue, 10]
fieldNameList 包含:
[field2, field3, field1, field4]
我想按 fieldNameList 的顺序访问 fieldList,即 颜色 = 黄色、绿色、红色、蓝色
我知道的一种方法是先遍历fieldList,然后创建HashMap<String, Field> nameFieldMap,然后遍历fieldNameList,并按顺序通过fieldNames 访问所需的字段属性。
但是,这涉及 2 次迭代,因此 花费的时间将是 2n。
有没有更好的方法来做到这一点?这可以一次性实现吗 迭代?
【问题讨论】:
-
可以根据
fieldListName对fieldlist进行排序。 -
如果您只想访问一次并打印它,那么您的方法似乎很好。请注意,尽管需要 2 次迭代,但算法仍然是
O(n)。 -
您的解决方案是最好的(也是最易读的),IMO。如果每次都将字段列表转换为 Map,则只有 2 次迭代。为什么不从一开始就用 Map 替换字段列表? LinkedHashMap 看起来是您需要的唯一数据结构。
-
我不能,因为 Apache Cayenne 仅提供 List
-
排序本身会是 O(n * log(n)),如果每次你需要比较两个字段时,它甚至会是 O(n^2 * log(n))必须在列表中获取他们名字的索引。您的基于地图的解决方案更易于实施且速度更快 (O(n))。
标签: java list iteration listiterator