2012-02-15 9 views
0

javaのハッシュテーブルまたはハッシュマップで同じキーを使用している特定の人の多くの詳細(名前、電子メール、国など)を保存したいですか?Javaのネストマップ

hashMap.put(1, "Programmer");   
hashMap.put(2, "IDM");  
hashMap.put(3,"Admin"); 
hashMap.put(4,"HR"); 

上記の例では、第1引数はキーで第2引数は値ですが、同じキーにどのように値を追加できますか?

+0

あなたの質問に具体的なタイトルを付けることはできますか? "Javaのネストされたマップ"や "Javaの多次元マップ"のようなもの?あなたは良いタイトルでより良い答えを得る可能性が高いです。 –

答えて

2

マップの各場所でマップを使用して話題を達成することはできますが、少し面倒です。あなたが本当にしたいかもしれないもの、しかし、複数のプロパティを持つPersonクラスを定義することであるように

Map<String, Map> people = new HashMap<String, Map>(); 
HashMap<String, String> person1 = new HashMap<String, String>(); 
person1.put("name", "Jones"); 
person1.put("email", "[email protected]"); 
//etc. 
people.put("key", person1); 

//... 

people.get("key").get("name"); 

それは聞こえる:私はあなたがいる理由についての情報がなくても行うことができます最善です

class Person 
{ 
    private String name; 
    private String email; 

    public String getName() 
    { 
     return name; 
    } 

    public void setName(String name) 
    { 
     this.name = name; 
    } 

    //plus getters and setters for other properties 
} 


Map<String, Person> people = new HashMap<String, Person>(); 
person1 = new Person(); 
person1.setName("Jones"); 
people.put("key", person1); 

//... 

people.get("key").getName(); 

この方法で値を格納しようとしています。これが間違ったツリーを吠えている場合は、あなたの質問に詳細を追加してください。

0

私は、文字列ページ、intサービスをキーに格納し、値の整数を格納したいと思っています。 あなたが何をする必要があるか

インサイドpageServiceは、equals()とhashCode()メソッドをオーバーライドしている.....必要な変数を持つクラスPageServiceを作成し、 HashMapのHMAP =として、あなたのHashMapを定義します。ハッシュマップが比較しているときからハッシュコードと等しいかどうかをチェックします。 IDEでハッシュコードと等価を生成するのは非常に簡単です。たとえば、eclipseでSource - > generate hashcode()とequals()を実行します。

public class PageService { 

private String page; 
private int service; 
public PageService(String page, int service) { 
    super(); 
    this.page = page; 
    this.service = service; 
} 
public String getPage() { 
    return page; 
} 
public void setPage(String page) { 
    this.page = page; 
} 
public int getService() { 
    return service; 
} 
public void setService(int service) { 
    this.service = service; 
} 


@Override 
public int hashCode() { 
    final int prime = 31; 
    int result = 1; 
    result = prime * result + ((page == null) ? 0 : page.hashCode()); 
    result = prime * result + service; 
    return result; 
} 

@Override 
public boolean equals(Object obj) { 
    if (this == obj) 
     return true; 
    if (obj == null) 
     return false; 
    if (getClass() != obj.getClass()) 
     return false; 
    PageService other = (PageService) obj; 
    if (page == null) { 
     if (other.getPage() != null) 
      return false; 
    } else if (!page.equals(other.getPage())) 
     return false; 
    if (service != other.getService()) 
     return false; 
    return true; 
} 
} 
0

次のクラスは非常に一般的です。広告の無限を入れ子にすることができます。明らかに、追加のフィールドを追加したり、HashMapの型を変更することができます。また、toStringメソッドのタブ移動はスマートにする必要があります。プリントアウトはフラットです。

import java.util.Collections; 
import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Map; 


public class HierarchicalMap 
{ 

    private String key; 
    private String descriptor; 
    private Map<String,HierarchicalMap>values=new HashMap<String,HierarchicalMap>(); 

    public String getKey() 
    { 
      return key; 
    } 
    public void setKey(String key) 
    { 
      this.key = key; 
    } 
    public void addToSubMap(String key, HierarchicalMap subMap) 
    { 
      values.put(key, subMap); 
    } 
    public String getDescriptor() 
    { 
      return descriptor; 
    } 
    public void setDescriptor(String descriptor) 
    { 
      this.descriptor = descriptor; 
    } 

    public HierarchicalMap getFromSubMap(String key) 
    { 
      return values.get(key); 
    } 

    public Map<String,HierarchicalMap> getUnmodifiableSubMap() 
    { 
      return Collections.unmodifiableMap(values); 
    } 


    public String toString() 
    { 
      StringBuffer sb = new StringBuffer(); 
      sb.append("HierarchicalMap: "); 
      sb.append(key); 
      sb.append(" | "); 
      sb.append(descriptor); 
      Iterator<String> itr=values.keySet().iterator(); 
      while(itr.hasNext()) 
      { 
        String key= itr.next(); 
        HierarchicalMap subMap=this.getFromSubMap(key); 
        sb.append("\n\t"); 
        sb.append(subMap.toString()); 

      } 
      return sb.toString(); 

    } 
関連する問題