You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何ArrayDeque类未实现Deque接口的部分抽象方法?

关于ArrayDeque未“显式”实现Deque部分方法的说明

你提到的这些方法,ArrayDeque其实要么自己已经实现,要么通过Deque接口的默认方法提供了实现,完全符合Java中“实现接口必须覆盖所有抽象方法,否则需声明为抽象类”的规则,具体原因如下:

  • 接口默认方法的支持
    自Java 8起,接口允许定义带实现的默认方法(Default Method)。Deque接口中的peekFirst()、peekLast()、pollFirst()、pollLast()都提供了默认实现,比如:
default E peekFirst() {
    try {
        return getFirst();
    } catch (NoSuchElementException e) {
        return null;
    }
}

即使ArrayDeque不显式重写这些方法,也能直接使用接口的默认实现来满足接口要求。

  • ArrayDeque的显式重写优化
    实际上,为了提升性能,ArrayDeque已经显式重写了这些方法:
    • descendingIterator():内部实现了DescendingIterator专属内部类,直接基于底层数组反向遍历,效率远高于接口默认的迭代器反转逻辑;
    • peekFirst()、peekLast()、pollFirst()、pollLast():均基于数组结构直接操作,避免了默认方法中捕获异常带来的性能开销。

你之所以会产生“未实现”的误解,大概率是因为JDK文档的展示逻辑:当类实现接口方法但未覆盖父类(如AbstractCollection)的方法时,文档不会特意标注“Overrides”,但这些方法确实存在于ArrayDeque类中。

内容的提问来源于stack exchange,提问作者Anand Pandey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:12:51