如何从hashmap返回对象

时间:2015-01-09 16:20:14

标签: java collections iterator 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

3 个答案:

答案 0 :(得分:3)

第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 - 方法,则在调用Object时将使用System.out.println(car)中的方法,并且该实现将返回以下内容(这是什么你在当前的印刷中看到了):

return getClass().getName() + "@" + Integer.toHexString(hashCode());

从上面的类创建新Car的方法是调用以下构造函数:

Car c = new Car("Ford");

第2步:使用循环进行迭代。 使用Map时,您可以选择迭代条目。所有这三种选择都会返回某种CollectionCollections可以使用各种类型的循环进行迭代。

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

如果您想要地图的按键(&#34;福特&#34;,&#34;沃尔沃&#34;),您可以通过拨打{{1}来取代对values()的通话}。对于条目,调用方法keySet(),该方法返回entrySet()对象,您可以在其中获取密钥(通过Map.Entry和值getKey())。

答案 1 :(得分:0)

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

在哈希映射中,您将对象放入字符串。

当您将对象打印为字符串时,它会让您输出

c1@13efr5t4
c2@234fvdf4

如果您想要打印假设的汽车名称,请使用以下方式,或者您必须在toString()中实施Car方法,这将为您提供预期的输出。

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

答案 2 :(得分:-2)

没有直接返回你可以像那样使用

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