package testpack;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class TestEm {
private String company;
private int salary;
TestEm(String company, int salary) {
this.company = company;
this.salary = salary;
}
public static void main(String[] args) {
Map<TestEm, String> map = new HashMap<TestEm, String>();
map.put(new TestEm("abc", 100), "emp1");
map.put(new TestEm("def", 200), "emp2");
map.put(new TestEm("ghi", 300), "emp3");
Set<TestEm> set = map.keySet();
Iterator<TestEm> it = set.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
**System.out.println(map.get(new TestEm("ghi", 300)));**
}
@Override
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof TestEm))
return false;
TestEm te = (TestEm) o;
return te.company.equals(company) && te.salary == salary;
}
@Override
public int hashCode() {
int code = 0;
code = salary * 10;
return code;
}
/*
* @Override public String toString() {
*
* return this.company; }
*/
}
そして出力は
testpack.TestEm@3e8 testpack.TestEm@7d0 testpack.TestEm@bb8 emp3
こんにちは、私は TestEm クラスで Object クラスのいくつかのメソッドをオーバーライドしました。すべて問題ありませんが、最初の 3 つの出力は iterator を使用してから SOP を実行しており、最後の出力は単に SOP を使用しています。最初の 3 つの出力がなぜなのか知りたいだけですイテレータを使用してオブジェクトとして来て、4番目のものは単にキーに対応する値として正しい出力です.toString()をオーバーライドしていないので、最初の3つの出力は正しいですが、toString()なしでSOPがどのように正しい出力を示しているか.