Java:如何绑定来自两个不同数组的值

时间:2017-06-19 17:36:34

标签: java arraylist hashmap

我有一个用户名列表和一个节点。我需要一个数据结构来保存有关给定节点上的用户名的信息。我需要像HashMap<String, ArrayList<String>这样的东西,但我还需要在一个简单的(不是一堆不同的数组)上对整个用户名列表进行操作。该数据结构是否存在,或者我需要保留两个ArrayListHashMap

4 个答案:

答案 0 :(得分:1)

HashMap<String, ArrayList<String>对我来说似乎是一个合理的解决方案。我不认为这里需要定制结构。

对于使用用户名的操作,您可以使用.keySet().entrySet()(或任何迭代方法)。

请参阅How to efficiently iterate over each Entry in a Map

答案 1 :(得分:1)

我喜欢您使用Map的原始想法。我认为Map对于这个问题来说是一个好的开始。

所有用户名都保证是唯一的吗?如果是这样,我会使用Set而不是List来表示用户名。也许您可以先将列表中的所有用户名转移到Set<Usernames>,然后您可以遍历节点/用户名列表以生成Map<Node, Set<Usernames>>

您要跟踪Set<Usernames>Map<Node, Set<Usernames>>,但我认为它会存储正确的数据,您可以对用户名集进行快速查找操作。

答案 2 :(得分:0)

如果Java中不存在某些内容,您可以尝试自行创建:

<强>节点

public class Node {
    List<User> users = new ArrayList<>();

    public List<User> getUsers() {
        return users;
    }

    public void setUsers(List<User> users) {
        this.users = users;
    }
}

用户

public class User {
    String username;
    String name;
    String surname;
    // ...
}

如果您不需要复杂的对象,可以在List<String> usernames中使用Node

然后,在你的应用中的某个地方:

public List<User> getUsersOfNode(Node node) {
    return node.getUsers();
}

使用此操作比使用HashMap更容易。

答案 3 :(得分:-1)

为什么不为此创建一个对象,包含3个私有字段(两个列表和一个映射)?