Подтвердить что ты не робот

Сохранение hashMap в hashMap

Я читаю данные из текстового файла и хочу сохранить HashMap в другой HashMap..

HashMap<string,HashMap<string,value>>

как хранить данные и извлекать их? любой образец кода будет оценен... спасибо u

4b9b3361

Ответ 1

Пример:

Создание и заполнение карт

Map<String, Map<String, Value>> outerMap = new HashMap<String, HashMap<String, Value>>();
Map<String, Value> innerMap = new HashMap<String, Value>();    
innerMap.put("innerKey", new Value());

Сохранение карты

outerMap.put("key", innerMap);

Получение карты и ее значений

Map<String, Value> map = outerMap.get("key");
Value value = map.get("innerKey");

Ответ 2

Создание двух простых хэш-карт: InnerMap и OuterMap

    HashMap<String, HashMap<String, String>> outerMap = new HashMap<String, HashMap<String,String>>();
    HashMap<String, String> innerMap = new HashMap<String, String>();

Заполнение HashMaps

    innerMap.put("InnerKey", "InnerValue");
    outerMap.put("OuterKey", innerMap);

Возврат значений из HashMaps

    String value = ((HashMap<String, String>)outerMap.get("OuterKey")).get("InnerKey").toString();
    System.out.println("Retreived value is : " + value);

Ответ 3

Вы получаете то, что lokks как 2-мерное HasMap, так сказать. Это означает, что вам нужно 2 String для хранения значения, а также для его получения.

Вы могли бы, например, написать 2 метода, обертывающих эту сложность, например этот (непроверенный код):

public class HashMap2D {
    private HashMap<String,HashMap> outerMap;

    public HashMap2D() {
        outerMap = new HashMap<String,HashMap>();
    }

    public void addElement(String key1, String key2, Value value) {
        innerMap=outerMap.get(key1);
        if (innerMap==null) {
            innerMap = new HashMap<String,Value>();
            outerMap.put(key1,innerMap);
        }
        innerMap.put(key2,value);
    }

    public Value getElement(String key1, String key2) {
        Hashmap innerMap = outerMap.get(key1);
        if (innerMap==null) {
            return null;
        }
        return innerMap.get(key2);
    }
}

Если вы хотите, чтобы методы обрабатывали несколько данных за раз, это сложнее, но следует тем же принципам.

Ответ 4

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

public class Key2D{
  private final String outer;
  private final String inner;

  public Key2D(String outer, String inner){
    this.outer = outer;
    this.inner = inner;
  }

  //include default implementations for
  //Object.equals(Object) and Object.hashCode()
  //Tip: If you're using Eclipse it can generate
  //them for you.
}

Затем просто создайте одну карту с двойным ключом:

Map<Key2D, Value> map = new HashMap<Key2D, Value>();
map.put(new Key2D("outerKey", "innerKey"), "Value");
map.get(new Key2D("outerKey", "innerKey")); // yields "Value"

Это дает более короткое решение. Производительность мудрая, вероятно, примерно такая же. Производительность памяти, вероятно, немного лучше (просто гадать, хотя).

Ответ 5

HashMap в HashMap вызовет проблемы с читабельностью, особенно когда он выходит за пределы двух уровней. Я предполагаю, что когда вы читаете данные из текстового файла, вы хотите классифицировать входы из строк и столбцов, которые должны быть похожи на многоуровневые категории или категории в категории. Если вы можете опубликовать образцы данных и свои намерения, я могу придумать пример пользовательского класса.

public class Category {
  private List<Category> subCategories;
  private List<Item> items;
}

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