向Hashmap添加元素

时间:2017-06-09 08:26:01

标签: java java-8

public class Osoba {
  final  String imie;
  final    String nazwisko;

    public Osoba(String imie, String nazwisko) {
        this.imie = imie;
        this.nazwisko = nazwisko;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 29 * hash + Objects.hashCode(this.imie);
        hash = 29 * hash + Objects.hashCode(this.nazwisko);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Osoba other = (Osoba) obj;
        if (!Objects.equals(this.imie, other.imie)) {
            return false;
        }
        if (!Objects.equals(this.nazwisko, other.nazwisko)) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return imie+" "+nazwisko; //To change body of generated methods, choose Tools | Templates.
    }



public class Pracownik extends Osoba{
private String stanowisko;
private double pensja;
    public Pracownik(String imie, String nazwisko) {
        super(imie, nazwisko);
    }



    public String getStanowisko() {
        return stanowisko;
    }

    public double getPensja() {
        return pensja;
    }

    public String getImie() {
        return imie;
    }

    public String getNazwisko() {
        return nazwisko;
    }

    public void setPensja(double pensja) {
        this.pensja = pensja;
    }

    public void setStanowisko(String stanowisko) {
        this.stanowisko = stanowisko;
    }




    @Override
    public String toString() {
        return super.toString()+" "+stanowisko+" "+pensja; //To change body of generated methods, choose Tools | Templates.

    }


public class Firma{
   Set<Pracownik> spis=new HashSet<Pracownik>() {};

   public void init(){
       Pracownik a1=new Pracownik("Iks","Iksinski");
       Pracownik a2 = new Pracownik("Maria", "Nowak"); 
       spis.add(a1);
       spis.add(a2);
       spis.add(new Pracownik("A","Aski"));
        for(Iterator it=spis.iterator();it.hasNext();)
        System.out.print(it.toString());
   }

}

 public static void zadanie4(){
         Firma ob=new Firma();
       ob.init();

    }

init()的结果java.util.HashMap $ KeyIterator @ 15db9742java.util.HashMap $ KeyIterator @ 15db9742java.util.HashMap $ KeyIterator @ 15db9742java.util.HashMap $ KeyIterator @ 15db9742ja ...

而且我不明白为什么它没有给我显示正确的结果

2 个答案:

答案 0 :(得分:0)

您应该调用it.next(),它将返回Set的下一个元素,并打印该元素(而不是像您当前那样打印Iterator实例):

for (Iterator<Pracownik> it=spis.iterator();it.hasNext();)
    System.out.print(it.next().toString());

PS,您应该使用通用Iterator<Pracownik>而不是原始Iterator,这样it.next()将返回Pracownik引用而不是Object引用

答案 1 :(得分:0)

您的代码出现问题: - 您正在调用Iterator类的toString()方法。 哪个是界面,并且没有toSting()Object方法的任何实现。

因此Itrator.toString()方法将调用Object类的toString()方法。

请找到Object类的实现toString()方法,该方法明确返回Callie对象的ClassName+HaxCode。 你在打电话请找到附件。

public String toString() {
        return this.getClass().getName() + "@" + Integer.toHexString(this.hashCode());
    }

您需要使用Iterator的E next();方法来打印结果。 正如你的USED集合HashSet已经覆盖了E next();迭代器接口,如下所示。

public ListIterator<E> listIterator(final int index) {
        final ListIterator<E> i = list.listIterator(index);

        return new ListIterator<E>() {
            public boolean hasNext()     { return i.hasNext(); }
            public E next()              { return i.next(); }
            public boolean hasPrevious() { return i.hasPrevious(); }
            public E previous()          { return i.previous(); }
         };   
    }

因此,在您的代码中,您应该使用Collections Overridden next()方法,该方法将返回集合的值,而不是调用Itreators.toString()方法。 enter image description here