gpt4 book ai didi

java - 如何为一个类(class)个性化 equals 并测试一组中的相等值?

转载 作者:行者123 更新时间:2023-11-28 21:27:12 25 4
gpt4 key购买 nike

我必须为我的火车类覆盖 equals,它具有三个属性:数字、货车和类型;只有编号相同的两列火车才相等。我必须测试我的火车 SET 中是否有重复项。我怎样才能做到这一点 ?这是我到目前为止所做的:

public class Train {
private int number;
private String type;
private int wagons;

public int getNumber() {
return number;
}

public void setNumber(int number) {
this.number = number;
}

public String getType() {
return type;
}

public void setType(String type) {
this.type = type;
}

public int getWagons() {
return wagons;
}

public void setWagons(int wagons) {
this.wagons = wagons;
}

@Override
public boolean equals(Object obj) {
Train otherTrain = (Train) obj;
boolean equal = false;
if (otherTrain.getNumber() == this.getNumber()) {
equal = true;
}
return equal;
}

训练 DAO:

public class TrainsDAO {
private Set<Train> trainSet = new HashSet<Train>();

public Set<Train> pupulateTheSet() {
Random random = new Random();

for (int i = 1; i < 1000; i++) {
Train train = new Train();
train.setNumber(random.nextInt(10));
train.setWagons(random.nextInt(30));
train.setType("Inter-city");
trainSet.add(train);
}
return trainSet;
}

public static void main(String[] args) {
TrainsDAO trainsDAO = new TrainsDAO();
Set<Train> trains = trainsDAO.pupulateTheSet();
for (Train train : trains) {
System.out.println(train);
}
}
}

和测试:

public class TrainTest extends TestCase {

private TrainsDAO trainsDAO = new TrainsDAO();
private Set<Train> trainSet = trainsDAO.pupulateTheSet();
public TrainTest(String name) {
super(name);
}

@Override
protected void setUp() throws Exception {
super.setUp();
}

@Test
public void testIfThereAreEqualValuesInSet() {
assertTrue(!duplicateFound());
}

private boolean duplicateFound() {
//check if there are duplicates in the set return true if there are no false otherwise
return false;
}
}

最佳答案

你的 equals 覆盖现在实现可能会抛出:

  • NullPointerException 如果参数为 null
  • ClassCastException 因为在将 Object 参数转换为 Train
  • 之前没有检查 instanceof

您可能想要解决这个问题。

更重要的是,对于基于散列的集合,您需要@Override Object#hashCode 方法与equals 一致(即,通过根据您的火车号码返回哈希码)。

正确覆盖 hashCode 将确保您的 Train 将被放入不同的哈希桶中(如果它们的编号不同)。

另请注意:让单元测试检查 Set 中的重复值似乎毫无意义 - Set 的全部意义在于它 允许重复。

文档 here .

关于java - 如何为一个类(class)个性化 equals 并测试一组中的相等值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37046035/

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