Car c1 = new Car();
Car c2 = new Car();
HashMap<String,Car> hm= new HashMap<String, Car>();
hm.put("Ford",c1);
hm.put("Volvo",c2);
如何迭代以僅獲取要打印的值(僅名稱)?如何從散列表返回對象
輸出應該是:
C1
C2
不是下面:
C1 @ 13efr5t4
C2 @ 234fvdf4
Car c1 = new Car();
Car c2 = new Car();
HashMap<String,Car> hm= new HashMap<String, Car>();
hm.put("Ford",c1);
hm.put("Volvo",c2);
如何迭代以僅獲取要打印的值(僅名稱)?如何從散列表返回對象
輸出應該是:
C1
C2
不是下面:
C1 @ 13efr5t4
C2 @ 234fvdf4
第1步:首先,你必須重寫toString()
方法類Car
。
public class Car {
// attribute
private final String name;
// Constructor
public Car(final String name) {
this.name = name;
}
// getter
public String getName() {
return name;
}
// Override of toString
@Override
public String toString() {
return name;
}
}
如果不實現適當的toString
- 方法,當你調用System.out.println(car)
從Object
的方法將被使用,並且實現返回以下(這是你在當前的打印見):
return getClass().getName() + "@" + Integer.toHexString(hashCode());
您從上面的類的新Car
的方法是調用下面的構造:
Car c = new Car("Ford");
第2步:使用循環迭代。 使用Map
時,您可以選擇遍歷鍵,值或條目。所有這三種選擇返回某種Collection
。可以使用各種類型的循環迭代Collections
。
// Standard Java 5+ foreach-loop that prints the values
for (Car c : hm.values()) {
System.out.println(c);
}
// Loop using an iterator that prints the keys
for (Iterator<Car> itr = hm.keys().iterator(); itr.hasNext();) {
System.out.println(itr.next());
}
// Or a Java 8 loop
hm.values().forEach(System.out::println);
如果改爲希望地圖的鍵(「福特」,「沃爾沃」),你可以到keySet()
調用替換調用values()
。對於條目,請調用方法entrySet()
,該方法返回一個Map.Entry
對象,您可以在該對象中同時獲得密鑰(通過getKey()
和值getValue()
)。
嗨wassgren,謝謝你對默認的toString方法的工作的解釋。但是,我應該使用Iterator從HashMap中獲取值。另外,當我說 Car c1 = new Car(); 我沒有傳遞任何名稱給構造函數,也沒有任何像getName()這樣的實例方法。鑑於這些條件,是否可以僅打印c1和c2?另外,如果你能告訴我如何通過覆蓋toString()來打印c1和c2,我將不勝感激。謝謝 –
@SukhenduRana,我已經更新了答案,以進一步說明您的後續問題。 – wassgren
現在我明白了。非常感謝。 –
沒有直接的回報,你可以使用這樣的
for (Car c : hm.values()) {
System.out.printf(c);}
你認爲他們的產量來自哪裏? –
HashMap<String,Car> hm= new HashMap<String, Car>();
hm.put("Ford",c1);
hm.put("Volvo",c2);
在你的哈希表你是把對象不是字符串。
當你削減打印您的對象作爲字符串是geving你輸出
[email protected]
[email protected]
如果你想打印假設汽車名稱,然後用下面的方式,或者你要實現你的Car
toString()
方法,這將給你的預期輸出。
for (Car c : hm.values()) {
System.out.println(c.getCarName());
}
您如何預期輸出爲'c1'和'c2'? –
看起來你正在打印一個打印對象名稱的對象的默認toString,後面是@ [內存地址] – cyroxis
是不可能的? –