gpt4 book ai didi

java - 使用Comparable对java中的自定义类进行排序

转载 作者:行者123 更新时间:2023-12-01 12:08:59 24 4
gpt4 key购买 nike

我有这个自定义类,我想按饱和度和亮度对其进行排序。
我尝试过自定义比较器类,但它不起作用。
现在我尝试实现Comparable。该程序会运行代码,但最后不会对列表进行排序。

这是我的代码。

测试类的一部分:

ArrayList<HSBColor> colorList = new ArrayList<HSBColor>(colors.values());

Collections.sort(colorList);

for(HSBColor co : colorList){
System.out.println(co.toString());
}


自定义类HSBColor

     public class HSBColor  implements Comparable<HSBColor>{

private float H;
private float S;
private float B;

public HSBColor(float h, float s, float b) {
H = h;
S = s;
B = b;
}

public float getH() {

return H;
}

@Override
public String toString() {
return String.format("%.2f %.2f %.2f", H,S,B);
}

public void setH(float h) {
H = h;
}

public float getS() {
return S;
}

public void setS(float s) {
S = s;
}

public float getB() {
return B;
}

public void setB(float b) {
B = b;
}


@Override
public int compareTo(HSBColor o) {
if(this.getS() > o.getS() && this.getB() > o.getB()){
return 1;
}
else{
return -1;
}
}
}


预先感谢!

编辑:额外代码

这是排序前的颜色:

Color HSB H:28.60465 S:71.07438 B:47.45098
Color HSB H:4.4999995 S:73.059364 B:85.882355 >> This is the one i need
Color HSB H:64.18605 S:79.62963 B:21.176472
Color HSB H:65.714294 S:39.873417 B:61.960785
Color HSB H:23.333332 S:40.0 B:70.588234

这是排序后的颜色

28,60 71,07 47,45
65,71 39,87 61,96
23,33 40,00 70,59
4,50 73,06 85,88
64,19 79,63 21,18

**编辑新算法**

这个比较正确,但排序不正确..

@Override
public int compareTo(HSBColor o) {

if(this.getS() > o.getS()) {
if(this.getB() >o.getB()){
return 1;
}
else{
return 0;
}
}
else{
if(this.getB() < o.getB()){
return -1;
}
else{
return 0;
}
}
}

最佳答案

您的 compareTo 方法未定义正确的顺序。

假设 this.getS() > o.getS() 但 this.getB() < o.getB()。

this.compareTo(o) 将返回 -1,但 o.compareTo(this) 也会返回 -1。

如果 A < B 且 B < A,这不是正确的排序。

正确的排序将首先按更重要的属性进行比较,然后,如果相等,则按不太重要的属性进行比较。

例如:

@Override
public int compareTo(HSBColor o) {
if(this.getS() > o.getS()){
return 1;
} else if (this.getS() < o.getS()) {
return -1;
} else {
if (this.getB() > o.getB()) {
return 1;
} else if (this.getB() < o.getB()) {
return -1;
} else {
return 0;
}
}
}

关于java - 使用Comparable对java中的自定义类进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27379638/

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