接口与实现队列

时间:2014-07-29 13:47:02

标签: java queue

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;
}

3 个答案:

答案 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?

此外,What does it mean to “program to an interface”?

答案 1 :(得分:0)

我经常为其他接口执行此操作,其中特定实现不通过接口提供任何内容,例如List

List<String> strings = new ArrayList<>();

在这种情况下,我保持最大的灵活性和最少的麻烦。

当然,你不会经常更改实现,但是有一些特定的实例,例如插入需要O(n)时间,查找需要O(log n)时间,反之亦然,在这种情况下你需要做一些研究如何使用界面。

你是否经常更改该系列的内容,但是要谨慎阅读?或者是另一种方式,你只插入一次并经常阅读吗?

答案 2 :(得分:0)

你的问题很广泛。这种技术被称为接口编程,它是多年收集编码良好实践的结果。它只是在很多方面让事情变得更容易。它彻底改变了我们今天编写软件的方式。如果您是一位热切的学习者并希望了解更多信息,请将this article视为首发。