java - 如何从 hashmap 返回对象

标签 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

最佳答案

第 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集合可以使用各种类型的循环进行迭代。

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

如果您想要 map 的键(“Ford”、“Volvo”),您可以将 values() 调用替换为对 keySet() 的调用>。对于条目,调用方法 entrySet() ,该方法返回一个 Map.Entry 对象,您可以在其中获取两个 key (通过 getKey()以及通过 getValue() 获得的值)。

关于java - 如何从 hashmap 返回对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27864814/

相关文章:

java - 如何在 Maven settings.xml 中设置存储库的顺序

java - 生成具有非均匀分布的随机整数数组

python - 如何在 python 中为非基于整数的索引构建 2D 查找

java - 从列表中删除项目或添加构建新列表?

java - 为什么没有 toArray(Class<T>)?

c++ - 将 vector 迭代器传递给模板函数

java - "array initializer needs an explicit target-type"- 为什么?

java - 关闭我的程序后如何保存对象变量?

c++ - 如何遍历列表但停在 size-1

python - 在什么情况下你应该在 python 中实际使用生成器?