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

时间:2014-08-25 04:49:12

标签: java vector indexing

我对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;

}

1 个答案:

答案 0 :(得分:0)

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

正如史密斯所提到的,如果你没有覆盖equals方法,你的代码应该返回正确的索引。您似乎错误地实施了equals方法,这就是为什么您总是得到-1