2012-02-15 2 views
0

java의 해시 테이블 또는 해시 맵에서 동일한 키를 사용하여 특정 사람의 많은 세부 정보 (예 : 이름, 전자 메일, 국가)를 저장하고 싶습니까? 위의 예에서Java의 중첩 맵

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

, 1 인수 i는 동일한 키 값을 더 추가하는 방법은, 키 및 두번째 인수 값이다?

+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() 메소드를 오버라이드 (override)입니다 ..... 필요한 변수와 클래스 PageService를 만들고 해시 맵 HMAP =로의 HashMap을 정의합니다. hashmap이 비교할 때 해시 코드와 같음을 검사하기 때문에. IDE에서 해시 코드와 같음을 생성하는 것은 매우 쉽습니다. 일식의 예는 소스로 이동을 위해 -> 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(); 

    } 
관련 문제