1

可能重复:
List 与 ArrayList 变量类型?

HashSet在我的程序中初始化了一个这样的:

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

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

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

我已经阅读关于集合接口的这篇文章,并且我了解接口(嗯,除了它们在这里的使用)。我读过这段来自 Effective Java 的摘录,也读过这个 SO question,但我觉得一点也不聪明。

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

4

1 回答 1

6

我认为在具体类型上使用接口是更好的做法,即

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

通过这样做,您承诺只使用Set界面提供的功能。如果您决定想要不同的性能特征(例如,如果您想使用 aTreeSet代替),这可以更容易地更换您在以后使用的那种集合,而不用担心破坏您的代码。

于 2012-10-03T09:41:58.650 回答