有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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());
        }

这是输出:

enter image description here

所以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) 个答案

  1. # 1 楼答案

    indexOf基于equals方法进行比较。重写犯罪类中的equals,否则它将作为参考比较