声明队列/哈希集

时间:2013-09-09 01:13:57

标签: java hashmap queue

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

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

我理解<T>可以是Integer / String /其他数据类型,这是为了确保我们将相同的数据类型添加到数据结构中。但是,我不明白为什么我必须将它声明为新的HashMap,当它是HashSet时。我关注this。有没有办法知道HashSet / Queue /其他必须只被声明为HashMap / LinkedList?非常感谢!如果我必须解释/修改我的问题,请告诉我。

2 个答案:

答案 0 :(得分:3)

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

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

但是如果以后你意识到你需要一个LinkedHashSet那么只需要替换它

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

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

答案 1 :(得分:1)

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