为何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
相关产品推荐
相关产品推荐

