2012-02-15 3 views
0

Я хочу хранить много деталей (например, имя, адрес электронной почты, страну) конкретного человека, используя тот же ключ в хэш-таблице или хэш-карте в java?Вложения карт в Java

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

В приведенном выше примере, первый аргумент является одним из ключевых и второй аргумент имеет значение, как я могу добавить больше значения к тем же самым ключом?

+0

Можете ли вы задать свой вопрос более конкретному названию? Что-то вроде «вложенных карт в java» или «многомерных карт в java»? Вероятно, вы получите лучшие ответы с хорошим заголовком. –

ответ

2

Вы можете добиться того, что вы говорите, используя карту в каждом месте вашей карты, но это немного грязно.

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"); 

Это походит на то, что вы могли бы на самом деле хотите, хотя, чтобы определить класс Person, который имеет несколько свойств:

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

Я думаю, что вы задаете , предположим, что мы хотим сохранить String-страницу, int-сервис в ключе и целое число в значении. Создайте класс PageService с необходимыми переменными и определить вашу HashMap, как Hashmap HMAP = .....

Внутри pageService, что вам нужно сделать, это переопределить равных() и хэш-код() методы. Поскольку когда hashmap сравнивает его, он проверяет hashcode и равен. Генерация hashcode и equals очень проста в IDE. Например, в затмении перейти на источник -> генерировать хэш-код() и 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(); 

    } 
Смежные вопросы