Java IndexOf返回-1,但列表中有元素
这个问题在提议的问题中没有得到回答。它甚至没有一个答案标记 我真的不明白发生了什么。我有一个充满元素的对象列表,但如果我使用indexOf(element),它会一直返回-1。 以下是我所做的检查:Java IndexOf返回-1,但列表中有元素,java,arrays,list,Java,Arrays,List,这个问题在提议的问题中没有得到回答。它甚至没有一个答案标记 我真的不明白发生了什么。我有一个充满元素的对象列表,但如果我使用indexOf(element),它会一直返回-1。 以下是我所做的检查: Crime oldCrime = this.service.getCrimeById(319L); System.out.println("ID old crime " + oldCrime.getId()); System.out.println("Index "
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;
}
}
indexOf
基于equals
方法进行比较。覆盖犯罪类中的等于
,否则将作为参考比较。大小不保证任何内容。如你所见,1、2和5也不存在。另外:您的Crime类的equals如何?您确定getCrimeById(id)
只返回getAllCrimes()
中存在的项吗?在Crime类中是否实现了equals()和hashCode()?indexOf将调用equals。所以,要么你写世界上最差的等号(myCrime.equals(possibleId)不起作用),要么你需要用另一个approach@kevingiroux由于不会在id上调用equals,而是在犯罪本身上调用equals,因此该方法本身应该是正确的。这基本上是我的罪行;不,它不会失败。这种方式是正确的。