1

我正在学习 HashSets 和 Queues,但我很难理解为什么 Queue/hashMap/other java.util 预定义的数据结构被声明为:

Set<T> h =  new HashSet<T>();
Queue<T> q = new LinkedList<T>();

我知道<T>可以是整数/字符串/其他数据类型,这是为了确保我们将相同的数据类型添加到数据结构中。但是,我不明白为什么当它是一个 HashSet 时,我必须将它声明为一个新的 HashMap。我正在关注这个。有没有办法知道必须将 HashSet/Queue/others 声明为仅 HashMap/LinkedList?非常感谢!请告诉我是否必须解释/修改我的问题。

4

2 回答 2

3

这被称为接口编码而不是实现。如果需要,拥有接口引用可以让您灵活地在以后更改实现。例如今天,您正在使用 HashSet,因此您将其定义为:

Set<T> h =  new HashSet<T>();

但是如果后来你意识到你需要一个LinkedHashSet那么简单地替换它

Set<T> h =  new LinkedHashSet<T>();

无需更改任何其他代码。这就是为什么这被称为良好的编码实践。

于 2013-09-09T01:15:17.493 回答
1

这只是遵循“编码到接口而不是实现”的规则。这将为您的程序提供更大的灵活性并允许更轻松的测试。使用接口时隔离和模拟类要容易得多;如果使用接口,则使用工厂创建对象和使用 Guice 或 Spring 等工具进行依赖注入要容易得多。

于 2013-09-09T01:16:40.730 回答