java - 你能像在 ArrayList 中那样循环遍历 HashMap 吗?

标签 java arraylist hashmap java-collections-api

你能像在 ArrayList 中一样循环遍历 HashMap 吗? 所以如果我有一个 Person 类:

public class Person
{
    private String name;
    private int age;

    public Person(String name, int age)
    {
        this.name = name;
        this.age = age;
    }

    public String getName()
    {
        return name;
    }

    public int getAge()
    {
        return age;
    }
}

然后有一类成员(member)资格,并使用数组列表我可以确保名称不重复:

import java.util.ArrayList;

public class Memberships
{
    private ArrayList<Person> members;

    public Memberships()
    {
        ArrayList<Person> members = new ArrayList<Person>();
    }

    public void addMember(String name, int age)
    {
        Person p = new Person(name, age);
        for (Person membs : members)
        {
            if (membs.getName().equals(name) && membs.getAge()==age)
            {
                return;
            }
        }
        members.add(p);
    }
}

但是,如果我想使用 HashMap 来代替姓名和年龄:

HashMap<String, Integer> members = new HashMap<String, Integer>();

然后我想做同样的事情,并检查姓名和年龄是否与另一个案例相同,我可以使用循环并检查吗?

public class Memberships
{
    private HashMap<String, Integer> members;

    public Memberships()
    {
        members = new HashMap<String, Integer>();
    }

    public void addMember(String name, int age)
    {
        members.put(name, age);
    }
}

我知道这样做有点奇怪,我只是想了解 HashMap。

好吧,然后我改变了它,这样:

HashMap<Person, ID> members = new HashMap<Person, ID>();

然后我想:

public void addMember(String name, int age)
{
    Person p = new Person (name, age);
    members.put(p, id);
    //**Say the id is a randomly generated number, that I don't really care about now
}

我如何检查人 p 的姓名和年龄与成员 HashMap 中的另一个人不同?

最佳答案

为什么要循环?您可以简单地测试 key 是否存在:

if( members.containsKey( name ) ){
  // duplicate
}

不过,您可以迭代:

for( Map.Entry<String,Integer> e: members.entrySet() ){
     // use e.getKey(), e.getValue()
}

稍后

自从鲍里斯提出这个问题以来:

Map<String,Person> members

是将名称集映射到人员集的一种方法。如果年龄也有助于区分Persons,则必须注意Boris提示:将hashCode和equals添加到Person(都使用name和age来hashCode comp和比较),然后你就可以这样做

Set<Person> members

members.contains( p ) 会告诉你一个平等的 Person 是否已经是成员。

关于java - 你能像在 ArrayList 中那样循环遍历 HashMap 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28008742/

相关文章:

java - 计算Java中两个数组中匹配的字符串数

java - 使用 ArrayList<Model> 将值存储到 Java 中的 MongoDB

java - 编辑数组中的类 [Java]

java - 根据键返回列表过滤HashMap

language-agnostic - 什么是哈希表和 HashMap 及其典型用例?

java - java中的utf-8解码

Java - 在本地端口上监听 RTP 数据包

java - 如何在java蛇梯游戏中设置蛇和梯子的位置?

Java:根据属性对对象的数组列表进行排序

Java HashMap 通过 JPA 作为 MySQL 中的一个元素