我正在重新审视数据结构和算法以更新我的知识,但有时我会遇到这个问题:
通常,多个数据结构确实需要交换底层数组上的一些元素。所以我在ADT1、ADT2中将swap()方法实现为私有(private)非静态方法。好处是,作为私有(private)方法我不需要检查参数,坏处是冗余。但是,如果我将 swap() 方法作为公共(public)静态方法放在辅助类中,我每次都需要检查索引的有效性,这使得在完成许多交换时交换调用非常低效。
那我该怎么办呢?忽略性能下降,还是编写小而冗余的代码?
最佳答案
更好的设计应该总是战胜小的低效率。仅在实际证明存在性能问题时才解决性能问题。
此外,你到底在做什么检查?不是自然抛出的ArrayIndexOutOfBoundsException
和/或 NullPointerException
够好了吗?
虽然有 public static Collections.swap(List<?>,int,int
),但它一文不值, java.util.Arrays
使其重载(对于 int[], long[], byte[], etc
)全部 private static
.
我不确定 Josh Bloch 是否曾明确说明他这样做的原因,但有人可能会猜测这与他的书 Effective Java 2nd Edition 中的第 25 项有关:比数组更喜欢列表。是的,使用 List
会出现“性能下降” , 但它可以忽略不计,许多优点足以弥补它。
关于java - 公共(public)(静态)swap() 方法与冗余(非静态)私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2757379/