java - 公共(public)(静态)swap() 方法与冗余(非静态)私有(private)方法

标签 java algorithm data-structures

我正在重新审视数据结构和算法以更新我的知识,但有时我会遇到这个问题:

通常,多个数据结构确实需要交换底层数组上的一些元素。所以我在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/

相关文章:

java - 在 MySQL 表中存储毫秒(使用 Java 存储/检索)

algorithm - 莫里斯中序遍历

java - 如何在 java 中编写十六进制浮点文字?

java - 为什么 string.matches ("^[A-Z0-9\\-\\_]+")在我通过操作另一个字符串来给出字符串值时不起作用,

算法 : create segments from points on a map

algorithm - 将数字分解为质数

c++ - 链表中头/第一个节点的声明

c++ - 嵌套类中的构造函数 (C++)

c - 如何使用双向链表正确初始化大结构?

java - 使用 FileWritingMessageHandler 的资源加载器