Вложенные карты в Java - PullRequest
       35

Вложенные карты в Java

0 голосов
/ 15 февраля 2012

Я хочу сохранить множество данных (таких как имя, адрес электронной почты, страна) конкретного человека, использующего один и тот же ключ в hashtable или hashmap в java?

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

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

Ответы [ 3 ]

2 голосов
/ 24 февраля 2012

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

Map<String, Map> people = new HashMap<String, Map>();
HashMap<String, String> person1 = new HashMap<String, String>();
person1.put("name", "Jones");
person1.put("email", "jones@jones.com");
//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 голосов
/ 03 февраля 2016

Следующий класс очень универсален. Вы можете вкладывать до бесконечности. Очевидно, что вы можете добавить дополнительные поля и изменить типы для 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();

    }
0 голосов
/ 10 июня 2015

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

Внутри pageService вам нужно переопределить методы equals () и hashcode ().С тех пор, когда 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;
 }
}
...