Queue是一个实现许多不同类的接口。我很困惑为什么我的教科书使用Queue提供这个示例文本。我也在普林斯顿网站的一个例子中找到了这个。这是一种提供代码的习惯方式,以便以后可以编辑为程序员首选的队列类型吗?
这是从二进制搜索符号表的算法中获取的代码。
public Iterable<Key> keys(Key lo, Key hi) {
Queue<Key> q = new Queue<Key>();
for (int i = rank(lo); i < rank(hi); i++) {
q.enqueue(keys[i]);
}
if (contains(hi)) {
q.enqueue(keys[rank(hi)]);
}
return q;
}
答案 0 :(得分:0)
首先,there are many classes that implement Queue
不是Queue is an interface that implements many different classes
。
第二,是的代码约定是你尽可能使用interface
来使代码更灵活,以防需要不同的实现。对于方法签名尤其如此,但对于变量和字段声明也是如此。
第三,看起来像一个错字。行应为Queue<Key> q = new LinkedList<Key>();
请在此处查看答案:Why are variables declared with their interface name in Java?
答案 1 :(得分:0)
我经常为其他接口执行此操作,其中特定实现不通过接口提供任何内容,例如List
。
List<String> strings = new ArrayList<>();
在这种情况下,我保持最大的灵活性和最少的麻烦。
当然,你不会经常更改实现,但是有一些特定的实例,例如插入需要O(n)时间,查找需要O(log n)时间,反之亦然,在这种情况下你需要做一些研究如何使用界面。
你是否经常更改该系列的内容,但是要谨慎阅读?或者是另一种方式,你只插入一次并经常阅读吗?
答案 2 :(得分:0)
你的问题很广泛。这种技术被称为接口编程,它是多年收集编码良好实践的结果。它只是在很多方面让事情变得更容易。它彻底改变了我们今天编写软件的方式。如果您是一位热切的学习者并希望了解更多信息,请将this article视为首发。