1 回答
TA贡献1841条经验 获得超3个赞
这个问题不是简单的重复数据删除:它是一种规范化形式。
标准方法是使用 aMap而不是 a Set。这是如何做到这一点的草图:
public <T> List<T> canonicalizeList(List<T> input) {
HashMap<T, T> map = new HashMap<>();
List<T> output = new ArrayList<>();
for (T element: input) {
T canonical = map.get(element);
if (canonical == null) {
element = canonical;
map.put(canonical, canonical);
}
output.add(canonical);
}
return output;
}
请注意,这是O(N). 如果你可以安全地假设,在重复的比例input很可能是小的,那么你可以设置的能力map,并output以规模input。
现在你似乎在说你已经在这样做了(最后一段),你在问是否有更好的方法。据我所知,没有。(HashSetAPI 让您可以测试一个集合是否包含等于 的值element,但它不会让您找出它在 中的内容O(1)。)
就其价值而言,HashSet<T>该类在底层实现为HashMap<T, T>. 因此,您不会通过HashSet直接使用...
添加回答
举报