我正在學習使用集合。我的問題是:集不包含重複。當我們嘗試插入重複項時,它不會拋出任何錯誤並自動刪除重複項。在插入set之前檢查每個值是否是一種好習慣?還是可以做一些類似下面的代碼?我認爲Java會在內部使用.contains(value)
進行檢查。你怎麼看?如果您在插入集合之前檢查重複項目
考慮到有n元素進入集合,這兩種情況下的大O複雜度是什麼?
import java.util.HashSet;
import java.util.Set;
public class DuplicateTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Set<Integer> mySet = new HashSet<Integer>();
mySet.add(10);
mySet.add(20);
mySet.add(30);
mySet.add(40);
mySet.add(50);
mySet.add(50);
mySet.add(50);
mySet.add(50);
mySet.add(50);
mySet.add(50);
System.out.println("Contents of the Hash Set :"+mySet);
}
}
因爲'HashSet'由'HashMap'支持,所以你的答案可以在這裏找到:http://stackoverflow.com/a/4553642/4490686 –
它不會做一個'contains'而是它只是贏了添加一個已經存在的元素,即它不會添加任何開銷來執行此操作。 –
僅供參考,您無法通過添加與已應用相同複雜度的其他操作來更改Big Oh複雜性。我的意思是,這兩個'for(int x:set){set.add(x); }和'for(int x:set){set.contains(x);} set.add(X); }'只要'add'和'contains'具有相同的複雜性,就具有相同的Big Oh複雜性。因爲O(C * n)== O(n),對於任何常數C. – user3707125