执行以下操作的最佳方法是什么(确保List中的项目遵循与ListTwo中的项目相同的顺序):
List
harry~20
marry~22
peter~40
jerry~33
janice~20
ListTwo
harry
marry
peter
janice
现在结果应该是这样的
ListThree
harry
marry
peter
janice
jerry
一步一步:
对于List中的每个项目:
将项目的第一部分与ListTwo中的项目进行比较
如果相等则将其添加到ListThree
- 醇>
如果项目存在于列表中而不存在于ListTwo中,则不执行任何操作但保存它 某处
从第1步继续
- 您在列表的末尾添加您在步骤之前跳过的项目 3
醇>
我知道这一点(实际上我不知道,我想我知道),有更好的方法来做到这一点我确定
为什么我会投票,我是否错过了什么?
答案 0 :(得分:3)
如果您反转角色(按顺序存储ArrayList
中的键)和SortedMap
中的键值映射(例如TreeMap或{{1})可能会更容易}。有序映射的比较器可以使用ConcurrentSkipListMap
作为元素比较的基础。
通过这种安排,地图定义了键/值映射,这对于地图来说是很自然的,并且列表保持了所需的顺序,这对于List来说是很自然的。
或者,使用常规Map,而不是有序地图,并使用列表上的迭代,并从地图中获取值。 E.g。
List.indexOf
编辑:Commons集合有SetUniqueList - 一个确保像Set一样的唯一性的列表。它还有各种类型的OrderedMap,特别是ListOrderedMap,它按照列表的顺序维护键/值映射。有关泛型支持,请参阅commons collections with generics。
答案 1 :(得分:1)
你可以打电话给
map.put(one,value1);
以后再打电话
map.get(one);
将返回value1
哈希映射也不接受重复键,所以如果你调用
map.put(one,value2);
之后,原始值被替换。
你可以使用
map.containsKey(one)
检查一个是否已作为密钥存在
答案 2 :(得分:0)
如果只是比较元素的键,那么可以将它们存储在LinkedHashSet中,并使用linkedHashset的contains方法来检查元素是否存在于常量时间O(1)中。
LinkeHashMap也可以达到目的,但它需要额外的空间来存储值,这不是必需的,我们只对键感兴趣。
参考:http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashSet.html