gpt4 book ai didi

java - 为什么 TreeSet 在不相等时删除重复项?

转载 作者:行者123 更新时间:2023-12-01 07:26:35 26 4
gpt4 key购买 nike

friend 们,我在使用 TreeSet 获取整个数据时遇到问题。我已经根据一些相同的值对 TreeSet 进行了排序。

这是我的代码:

MyCars 类:

class MyCars implements Comparable<MyCars>{

private String number;
private int yearModel;
private double horsePower;

public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public int getYearModel() {
return yearModel;
}
public void setYearModel(int yearModel) {
this.yearModel = yearModel;
}
public double getHorsePower() {
return horsePower;
}
public void setHorsePower(double horsePower) {
this.horsePower = horsePower;
}
@Override
public int compareTo(MyCars c) {
return Double.compare(this.horsePower,c.getHorsePower());
}
}

SortTest 类:

public class SortTest {

void GoForSort(){
Set dataStructure=new TreeSet();

MyCars c1=new MyCars();
c1.setNumber("SRT-Viper123");
c1.setYearModel(2013);
c1.setHorsePower(450.00);

MyCars c2=new MyCars();
c2.setNumber("Chevrolet-Corvette901");
c2.setYearModel(2012);
c2.setHorsePower(450.00);

MyCars c3=new MyCars();
c3.setNumber("Ford-Mustang678");
c3.setYearModel(2014);
c3.setHorsePower(455.00);

dataStructure.add(c1);
dataStructure.add(c2);
dataStructure.add(c3);

Iterator<MyCars> it=dataStructure.iterator();
while(it.hasNext()){
MyCars c=it.next();
System.out.println(c.getNumber()+"\t"+c.getHorsePower()+"\t"+c.getYearModel());
}

}
public static void main(String[] args) {
SortTest st=new SortTest();
st.GoForSort();

}

}

如您所见,我已根据马力对 TreeSet 进行了排序。我已经为两个物体赋予了相同的马力值。

这是我得到的输出:

SRT-Viper123    450.0   2013
Ford-Mustang678 455.0 2014

但我也希望 Chevrolet-Corvette901 出现在这组输出中。为什么我不明白。

有什么办法也可以包含它吗?因为我发现当我将集合更改为 ArrayList 时没有问题。 TreeSet 仅对唯一元素进行排序吗?

是否有任何技巧可以在迭代期间获取并打印所有对象,无论它们在TreeSet中的唯一性如何...

最佳答案

TreeSetSet 的子级,并且集合不存储重复值。这是 java docs 中 set 定义的第一行.

A collection that contains no duplicate elements.

编辑:正如@AlexEfimov 在下面的评论中指出的,TreeSet使用 compareTo 方法来确定元素的顺序和相等性,因此正如其他人指出的那样,MyCarscompareTo 实现将使具有相同马力的两个元素相等,因此只有其中一个会存储在 TreeSet 中。

关于java - 为什么 TreeSet 在不相等时删除重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23489718/

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