2017-06-19 11 views
1

私はユーザー名とノードのリストを持っています。特定のノード上のユーザー名に関する情報を保持するためのデータ構造が必要です。私はHashMap<String, ArrayList<String>のようなものが必要ですが、私はまた、簡単に(異なる配列の束ではなく)ユーザー名リスト全体の操作を実行する必要があります。そのデータ構造が存在するか、またはArrayListHashMapの2つを保持する必要がありますか?Java:2つの異なる配列から値をバインドする方法

答えて

-1

3つのプライベートフィールド(2つのリストと1つのマップ)を持つオブジェクトを作成してみませんか?ただ

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

次のことが可能です。

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

ユーザー複雑なオブジェクトを必要としない場合はNodeList<String> usernamesを使用してください。

その後、どこかのアプリで:これで動作

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

HashMapよりも簡単です。

1

HashMap<String, ArrayList<String>は私にとって妥当な解決策のようです。私はここにカスタム構造の必要はないと思う。

ユーザー名の操作では、.keySet()または.entrySet()(または任意の反復方法)を使用できます。

How to efficiently iterate over each Entry in a Mapを参照してください。

0

私はMapを使用することについてあなたの元々の考えが好きです。私はMapがこの問題の良いスタートになると思います。

すべてのユーザー名が一意であることが保証されていますか?もしそうなら、ユーザ名を表すのにListの代わりにSetを使用します。たぶんリスト内のすべてのユーザー名をSet<Usernames>に転送してから、ノード/ユーザー名リストを反復してMap<Node, Set<Usernames>>を生成することができます。

Set<Usernames>Map<Node, Set<Usernames>>を把握することができますが、適切なデータが保存されていて、ユーザー名の設定で高速検索ができると思います。

関連する問題