将算法与它们操作的数据结构分开的一种方法是考虑实现算法所需的操作,将这些操作抽象为接口,根据接口对算法进行编码,并拥有所有数据结构实现接口。
例如,假设您的排序算法需要一种方法来比较位置i
和的项目j
,以及交换项目i
和的方法j
。然后您的界面将如下所示:
interface Sortable {
int compare(int i, int j);
void swap(int i, int j);
}
现在您可以按照以下方式实现分拣机Sortable
:
void sort1(Sortable container) {
// first way to sort
}
void sort2(Sortable container) {
// second way to sort
}
最后,让你的容器实现Sortable
:
class CoolContainer1 implements Sortable {
public int compare(int i, int j) {
...
}
public void swap(int i, int j) {
...
}
// other operations
}
class CoolContainer2 implements Sortable {
public int compare(int i, int j) {
...
}
public void swap(int i, int j) {
...
}
// other operations
}
请注意,以上所有内容只是对您的学习练习的建议。Java 提供了强大的排序工具,适用于列表和数组,并允许您将排序顺序指定到尽可能小的细节。循环查看该Collections.sort
方法以获取更多信息。