java IndexOf返回1,但list包含元素
这个问题在提议的问题中没有得到回答。它甚至连答案都没有标记
我真的不明白发生了什么。我有一个充满元素的对象列表,但如果我使用indexOf(元素),它会一直返回-1。 以下是我做的检查:
Crime oldCrime = this.service.getCrimeById(319L);
System.out.println("ID old crime " + oldCrime.getId());
System.out.println("Index " + this.service.getAllCrimes().indexOf(oldCrime));
int oldSize = this.service.getAllCrimes().size();
for (Crime c : this.service.getAllCrimes()) {
System.out.println("Crime id " + c.getId());
}
这是输出:
所以oldCrime存在于列表中,列表中的所有犯罪都存在,因为我可以打印它们的id,但是对同一列表调用的方法indexOf返回-1
也许这是个愚蠢的错误,但我真的搞不懂
public class Crime {
@CsvBindByName(column = "id")
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@CsvBindByName(column = "zipCode")
@NonNull
private int zipCode;
@CsvBindByName(column = "totPopulation")
@NonNull
private int totPopulation;
@CsvBindByName(column = "medianAge")
@NonNull
private double medianAge;
@CsvBindByName(column = "totMales")
@NonNull
private int totMales;
@CsvBindByName(column = "totFemales")
@NonNull
private int totFemales;
@CsvBindByName(column = "totHouseholds")
@NonNull
private int totHouseholds;
@CsvBindByName(column = "avgHouseholdSize")
@NonNull
private double avgHouseholdSize;
/**
* @param id
* @param zipCode
* @param totPopulation
* @param medianAge
* @param totMales
* @param totFemales
* @param totHouseholds
* @param avgHouseholdSize
*/
public Crime(long id, int zipCode, int totPopulation, double medianAge, int totMales, int totFemales,
int totHouseholds, double avgHouseholdSize) {
this.id = id;
this.zipCode = zipCode;
this.totPopulation = totPopulation;
this.medianAge = medianAge;
this.totMales = totMales;
this.totFemales = totFemales;
this.totHouseholds = totHouseholds;
this.avgHouseholdSize = avgHouseholdSize;
}
/**
*
*/
public Crime() {
this.id = 0;
this.zipCode = 0;
this.totPopulation = 0;
this.medianAge = 0;
this.totMales = 0;
this.totFemales = 0;
this.totHouseholds = 0;
this.avgHouseholdSize = 0;
}
/**
* @param id
*/
public Crime(long id) {
this.id = id;
this.zipCode = (int)id;
this.totPopulation = (int)id;
this.medianAge = (int)id;
this.totMales = (int)id;
this.totFemales = (int)id;
this.totHouseholds = (int)id;
this.avgHouseholdSize = (int)id;
}
public long getId() {
return id;
}
public int getZipCode() {
return zipCode;
}
public void setZipCode(int zipCode) {
this.zipCode = zipCode;
}
public int getTotPopulation() {
return totPopulation;
}
public void setTotPopulation(int totPopulation) {
this.totPopulation = totPopulation;
}
public double getMedianAge() {
return medianAge;
}
public void setMedianAge(double medianAge) {
this.medianAge = medianAge;
}
public int getTotMales() {
return totMales;
}
public void setTotMales(int totMales) {
this.totMales = totMales;
}
public int getTotFemales() {
return totFemales;
}
public void setTotFemales(int totFemales) {
this.totFemales = totFemales;
}
public int getTotHouseholds() {
return totHouseholds;
}
public void setTotHouseholds(int totHouseholds) {
this.totHouseholds = totHouseholds;
}
public double getAvgHouseholdSize() {
return avgHouseholdSize;
}
public void setAvgHouseholdSize(double avgHouseholdSize) {
this.avgHouseholdSize = avgHouseholdSize;
}
}
# 1 楼答案
indexOf
基于equals
方法进行比较。重写犯罪类中的equals
,否则它将作为参考比较