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直接使用...
添加回答
舉報