2017-05-30 148 views
0

我有整數列表,我想要創建一個for循環從序列1到n跳過列表中已經存在的元素,那麼這是最好的方法還是有效的方法呢?通過跳過列表中的值來爲序列編寫for循環?

+0

你可以在這裏找到類似的問題https://stackoverflow.com/questions/203984/how-do-i-remove-repeated-elements-from-arraylist –

+0

可能的重複[如何從ArrayList中刪除重複的元素?](https://stackoverflow.com/questions/203984/how-do-i-remove-repeated-elements-from-arraylist) –

+0

這個問題與'hibernate'或'spring-mvc'有什麼關係? – Andreas

回答

-1

您可以使用哈希集爲目的它會自動刪除重複的元素。因此,對於您的輸入數組,將每個元素逐個放入哈希集中,最後您的哈希集將包含非重複元素。

在關於hashshet參閱疑惑:https://www.tutorialspoint.com/java/java_hashset_class.htm

+0

問題不在於從列表中刪除重複項。這是關於'for'循環,*跳過已經在列表中的*值。 – Andreas

+0

準確地說,只有在有重複值時才跳過,這意味着對於某個值有重複。內部Hashset使用contains方法來檢查輸入是否存在 – pragadez

+0

問題中沒有任何內容說明循環將修改列表。如果list是'[2,4,5]'和'n = 7',那麼OP只需要一個迭代值爲'1','3','6'和'7'的循環。其中沒有任何「重複」。 – Andreas

1

大多數高效方式,即O(M + N),是將List轉換爲HashSet,然後檢查使用contains()

Set<Integer> set = new HashSet<>(list); 
for (int i = 1; i <= n; i++) { 
    if (! set.contains(i)) { 
     // your code here 
    } 
} 

如果您未直接轉換爲Set,並直接使用List的方法,則性能爲O(mn),其中m是列表中元素的數量。

+0

非常感謝 –