Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java IndexOf返回-1,但列表中有元素_Java_Arrays_List - Fatal编程技术网

Java IndexOf返回-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 "

这个问题在提议的问题中没有得到回答。它甚至没有一个答案标记

我真的不明白发生了什么。我有一个充满元素的对象列表,但如果我使用indexOf(element),它会一直返回-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;
    }


}

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

大小不保证任何内容。如你所见,1、2和5也不存在。另外:您的Crime类的equals如何?您确定
getCrimeById(id)
只返回
getAllCrimes()
中存在的项吗?在Crime类中是否实现了equals()和hashCode()?indexOf将调用equals。所以,要么你写世界上最差的等号(myCrime.equals(possibleId)不起作用),要么你需要用另一个approach@kevingiroux由于不会在id上调用equals,而是在犯罪本身上调用equals,因此该方法本身应该是正确的。这基本上是我的罪行;不,它不会失败。这种方式是正确的。