2012-10-03 149 views
0

可能重複:
List versus ArrayList variable type?'Set = new HashSet'或'HashSet = new Hashset'?

我intialising一個HashSet像這樣在我的計劃:

Set<String> namesFilter = new HashSet<String>();

這是在功能上,如果我initilise像任何不同所以?

HashSet<String> namesFilter = new HashSet<String>();

我讀過關於this集合接口,和我(在這裏很好,除了他們使用)理解接口。我讀過Effective Java的excerpt,我讀過這個SO question,但我覺得沒有比這更聰明。

在Java中是否有最佳實踐,如果有,爲什麼?我的直覺是,在我的第一個例子中,它使鑄造到一個不同類型的Set更容易。但是,再一次,你只能投射到某個集合,然後你可以通過重構它來轉換它。

+0

我更喜歡使用界面。如果你已經知道所有的論點,那麼問題是什麼?有什麼問題? – duffymo

+0

請參見[編程接口的含義是什麼?](http://stackoverflow.com/questions/383947/what-does-it-mean-to-program-to-an-interface) – Jesper

+0

@duffymo我聽到了這些論點,但他們並沒有幫助我理解。然而,這裏的答案和提議的複製中的答案是有意義的。 – Pureferret

回答

5

我認爲這是更好的做法是使用該接口在具體類型,即

Set<String> strings = new HashSet<String>(); 

通過這樣做,你全心投入使用僅由Set接口提供的功能。如果您決定要使用不同的性能特徵(例如,如果您想使用TreeSet代替),而不用擔心破壞代碼,則可以更輕鬆地更換以後使用的設置。