gpt4 book ai didi

java - 如何告知比较使用的方法

转载 作者:行者123 更新时间:2023-11-30 08:44:42 26 4
gpt4 key购买 nike

我需要 2 个对象:最大堆和最小堆。这两个对象将是相同的,但它们的某些方法(如 swap 或 bubbleUp)以不同的方式比较对象。只有比较线不同:

while (curr > 0 && (heap[parent].compareTo(heap[curr]) < 0)) {

创建具有存储信息的 boolean 值的堆类更好还是最小堆?或者更好地为最小和最大堆创建子类,它们将拥有自己的方法?

  public abstract class Heap {
private int[] values = new int[];

public void SomeHeapMethod()
{
if(values[0].compareTo(values[1]) > 0 ) //this would be diffent for max and min heap
}
}

最佳答案

用各自的方法创建两个类。如果您正在创建一个类,它可以充当两个不同的类,那么您就违反了著名的 Clean Code 一书中的原则之一。

In object-oriented programming, the single responsibility principle states that every class should have a single responsibility, and that responsibility should be entirely encapsulated by the class. All its services should be narrowly aligned with that responsibility….

另一个角度是可读性,如果另一个程序员要查看您的代码,与两个多态性或两个类解决方案相比,很难发现一个类具有两种功能状态。

下面是我将如何使用多态性解决方案。其中共享功能被继承,自定义功能在每个类中定义。

public abstract class Heap {
private Integer[] values;

public int compare(int i , int j)
{
throw new RuntimeException("Not implemented");
}

public void SomeHeapMethod()
{
if(this.compare(values[0], values[1]) > 0)
return;
}
}

class MinHeap extends Heap
{
public int compare(int i , int j)
{
return i + j % 2;
}
}

class MaxHeap extends Heap
{
public int compare(int i , int j)
{
return i + j % 1;
}
}

关于java - 如何告知比较使用的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33682732/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com