簡體   English   中英

如何從哈希圖返回對象

[英]how to return objects from hashmap

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:首先,您必須重寫Car類中的toString()方法。

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);

如果您想要地圖的鍵(“福特”,“沃爾沃”),則可以將對values()的調用替換為對keySet()的調用。 對於條目,調用方法entrySet() ,該方法返回一個Map.Entry對象,您可以在其中同時獲取鍵(通過getKey()和通過getValue()獲得值)。

HashMap<String,Car> hm= new HashMap<String, Car>();
hm.put("Ford",c1);
hm.put("Volvo",c2);

在哈希圖中,您要放置的對象不是字符串。

當您將對象打印為字符串時,它會產生輸出

c1@13efr5t4
c2@234fvdf4

如果您要打印假設的汽車名稱,請使用以下方法,否則您必須在Car實現toString()方法,這將為您提供預期的輸出。

for (Car c : hm.values()) {
    System.out.println(c.getCarName());
}

沒有直接的回報,你可以這樣使用

for (Car c : hm.values()) {
System.out.printf(c);} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM