Java向量-所有对象都获得索引-1

Java向量-所有对象都获得索引-1,java,vector,indexing,Java,Vector,Indexing,我对java向量有一个非常奇怪的问题 我正在用java开发一个任务——EShop,为此我有3个关于商品、客户和工人的向量 我添加到customers和workers Vector的所有对象都得到了索引-1,实际上我在任何指南中都找不到类似的内容 关于它的实际问题-我不能从我的向量中删除任何对象 我仍然可以得到该对象的完整列表,我可以更改它们,保存它们或从.txt或.ser加载它们。他们可以使用商店的功能,比如购买,所以他们实际上是在向量中。但是由于-1索引,我无法删除它们 从字面上看,同一个项目

我对java向量有一个非常奇怪的问题

我正在用java开发一个任务——EShop,为此我有3个关于商品、客户和工人的向量

我添加到customers和workers Vector的所有对象都得到了索引-1,实际上我在任何指南中都找不到类似的内容

关于它的实际问题-我不能从我的向量中删除任何对象

我仍然可以得到该对象的完整列表,我可以更改它们,保存它们或从.txt或.ser加载它们。他们可以使用商店的功能,比如购买,所以他们实际上是在向量中。但是由于-1索引,我无法删除它们

从字面上看,同一个项目中的相同代码等,只是与其他对象类型(货物)一起工作是完美的,所以我甚至不知道我应该在哪里寻找这个错误的原因

public class MitarbeiterVerwaltung {
    private Vector<Mitarbeiter> mitarbeiterListe = new Vector<Mitarbeiter>();
    private PersistenceManager pm = new ObjectStreamPM();

public boolean einfuegeMitarbeiter(Mitarbeiter einMitarbeiter) throws PersonExistiertBereitsException{
    if (mitarbeiterListe.contains(einMitarbeiter))
        throw new PersonExistiertBereitsException(einMitarbeiter, "- in einfuegeMitarbeiter()");
    else
        return mitarbeiterListe.add(einMitarbeiter);
}

public void loescheMitarbeiter(Mitarbeiter einMitarbeiter){
    mitarbeiterListe.remove(einMitarbeiter);
}
公共类Mitarbeiter扩展个人{

private static final long serialVersionUID = -2689774445774446934L;

private double rabbat;
private transient WarenkorbVerwaltung warenkorb;

public Mitarbeiter(String nickname, int knummer, String passwort,
        String name, double rabbat){
    super (nickname, knummer, passwort, name, PersonStatus.Mitarbeiter);
    this.warenkorb = new WarenkorbVerwaltung();
    this.rabbat = rabbat;
}
setter,getter,toString,比较如下。怀疑它对问题的重要性

public boolean equals (Object o){
    if(o instanceof Mitarbeiter)
        return ((this.getKnummer() == ((Mitarbeiter) o).getKnummer()) 
            && (this.getNickname().equals(((Mitarbeiter) o).getNickname())));
    else
        return false;

}
解决方案foun-感谢Smith_61和其他人为我指出了对象类中的equals方法。我真的没有实现它,认为母类(Person)的equals就可以了。将equals添加到Mitarbeiter类解决了这个问题

public boolean equals (Object o){
    if(o instanceof Mitarbeiter)
        return ((this.getKnummer() == ((Mitarbeiter) o).getKnummer()) 
            && (this.getNickname().equals(((Mitarbeiter) o).getNickname())));
    else
        return false;

}
Vector.indexOf(object)
在内部调用该对象的
equals
方法,并检查Vector中的任何元素是否返回
true
。因此需要重写
Mitarbeiter
类的
equals
方法并进行比较


正如Smith所提到的,如果您没有重写
equals
方法,那么您的代码应该返回正确的索引。似乎您错误地实现了equals方法,这就是为什么您总是得到
-1

Mitarbeiter类的定义是什么?将其添加到主帖子中,不知道如何在注释中格式化代码需要整个类的定义。我假设您已经重写了equals方法,我们需要看到这一点。
public boolean equals (Object o){
    if(o instanceof Mitarbeiter)
        return ((this.getKnummer() == ((Mitarbeiter) o).getKnummer()) 
            && (this.getNickname().equals(((Mitarbeiter) o).getNickname())));
    else
        return false;

}