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 ...
而且我不明白为什么它没有给我显示正确的结果
答案 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()
方法。