我对java Vector有一个非常奇怪的问题。
我正在开展一项任务 - 使用java的EShop,为此我有3个带有商品,客户和工人的载体。
我添加到客户和工作人员的所有对象Vector得索引-1,我实际上无法在任何指南中找到这样的内容。
关于它的实际问题 - 我无法从我的Vector中删除任何对象。
我仍然可以获得该对象的完整列表,我可以更改它们,保存它们或从.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);
}
控制台输出(对象ID,对象昵称(第一,第二等),索引):
public Vector<Mitarbeiter> getAlleMitarbeiter(){
for(Mitarbeiter m : mitarbeiterListe){
System.out.println(m.getKnummer()+ " "+m.getNickname()+" index:"+mitarbeiterListe.indexOf(m));
}
return mitarbeiterListe;
}
0第一个索引:-1
1秒指数:-1
2第三个指数:-1
3第四个指数:-1
下面提到的课程定义。
public class Person implements Serializable {
private static final long serialVersionUID = 3134247641351150211L;
private String nickname;
private int knummer;
private String passwort;
private String name;
private PersonStatus status;
public Person(String nickname, int knummer, String passwort,
String name, PersonStatus status){
this.nickname = nickname;
this.knummer = knummer;
this.passwort = passwort;
this.name = name;
this.status = status;
}
公共级别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;
}
setters,getters,toString,比较如下。怀疑它对这个问题的重要性。
解决方案基础 - 感谢Smith_61和其他人向我指出了对象类中的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;
}
答案 0 :(得分:0)
Vector.indexOf(object)
在内部调用该对象的equals
方法,并检查向量中的任何元素是否返回true
。因此,您需要覆盖equals
类的Mitarbeiter
方法并进行比较。
正如史密斯所提到的,如果你没有覆盖equals
方法,你的代码应该返回正确的索引。您似乎错误地实施了equals方法,这就是为什么您总是得到-1
。