【问题标题】:adding elements to Hashmap向 Hashmap 添加元素
【发布时间】:2017-06-09 08:26:01
【问题描述】:
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...

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

【问题讨论】:

  • it.next().toString() 如果你想在迭代的当前元素上应用toString()
  • 您还应该声明通用迭代器:Iterator&lt;Pracownik&gt; 而不是原始迭代器:Iterator(即使它应用 toString() 方法您也可能看不到它的优势)。

标签: java java-8


【解决方案1】:

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

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

P.S.,您应该使用通用的Iterator&lt;Pracownik&gt; 而不是原始的Iterator,这样it.next() 将返回Pracownik 引用而不是Object 引用。

【讨论】:

  • 当然,只要有可能,最好不要手动处理Iteratorfor(Pracownik p: spis) System.out.println(p);
【解决方案2】:

您的代码有问题:- 您正在调用迭代器类的 toString() 方法。 这是一个接口,没有Object类的toSting()方法的任何实现。

所以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() 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 2019-07-25
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多