如何 return 来自 hashmap 的对象

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 class.

中的 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 的方法,并且该实现 returns 以下(这是您在当前打印中看到的内容):

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

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

Car c = new Car("Ford");

步骤 2:使用循环进行迭代。 使用 Map 时,您可以选择遍历 keysvaluesentries.所有这三种选择 returns 某种 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);

如果您想要地图的键 ("Ford"、"Volvo"),您可以将对 values() 的调用替换为对 keySet() 的调用。对于条目,调用方法 entrySet(),其中 returns 一个 Map.Entry 对象,您可以在其中获取键(通过 getKey() 和通过 getValue() 获取值)。

没有return可以直接用

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

在您的哈希映射中,您放置的是对象而不是字符串。

当您将对象打印为字符串时,它正在给您输出

c1@13efr5t4
c2@234fvdf4

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

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