Java向量-所有对象都获得索引-1
我对java向量有一个非常奇怪的问题 我正在用java开发一个任务——EShop,为此我有3个关于商品、客户和工人的向量 我添加到customers和workers Vector的所有对象都得到了索引-1,实际上我在任何指南中都找不到类似的内容 关于它的实际问题-我不能从我的向量中删除任何对象 我仍然可以得到该对象的完整列表,我可以更改它们,保存它们或从.txt或.ser加载它们。他们可以使用商店的功能,比如购买,所以他们实际上是在向量中。但是由于-1索引,我无法删除它们 从字面上看,同一个项目中的相同代码等,只是与其他对象类型(货物)一起工作是完美的,所以我甚至不知道我应该在哪里寻找这个错误的原因Java向量-所有对象都获得索引-1,java,vector,indexing,Java,Vector,Indexing,我对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;
}