'Set = new HashSet'或'HashSet = new Hashset'?

时间:2012-10-03 09:36:26

标签: java generics collections constructor initialization

  

可能重复:
  List versus ArrayList variable type?

我正在我的计划中正式表达HashSet

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

如果我这样开始,这在功能上有什么不同吗?

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

我已经阅读了关于集合界面的this,我理解了界面(好吧,除了它们在这里使用)。我从Effective Java中读到了这个excerpt,我读过这个SO question,但我觉得没有更聪明。

Java中是否有最佳实践,如果是,为什么?我的直觉是,在我的第一个例子中,它使得转换为不同类型的Set更容易。但话说回来,你只会投射到一个集合的东西,你可以通过重新构建它来转换它。

1 个答案:

答案 0 :(得分:6)

我认为在混凝土类型上使用界面是更好的做法,即

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

通过这样做,您只承诺使用Set接口提供的功能。如果您决定要使用不同的性能特征(例如,如果您想使用TreeSet而不担心破坏代码),这样可以更轻松地更换您以后使用的集合类型。