Java: Как я могу записать HashMap <String, HashMap <Integer, ArrayList <Integer>>> в файл? - PullRequest
3 голосов
/ 15 января 2012

Так что я могу написать:

HashMap<String, ArrayList<Integer>> ...

но когда дело доходит до структуры типа

HashMap<String, HashMap<Integer, ArrayList<Integer>>> ...

У меня не получается ...

Set<String> keys = outer.keySet();
List<String> list = sortList(keys);
Iterator<String> it = list.iterator();
HashMap<Integer,ArrayList<Integer>> inner=new HashMap<Integer,ArrayList<Integer>>();
                while (it.hasNext()) {
                    String key = it.next();
                    Set<Integer> ids= inner.keySet();
                    List<Integer> positions=sortList(ids);
                    Iterator<Integer> itIn=positions.iterator();
                    while(itIn.hasNext()){
                        String id= it.next();
                        output.write(key + "\t" + outer.get(key) + " " +inner.get(id) +"\n");
                    }
                }

Мой код может записывать все внешние ключи и первые элементы Integer1, но не может видеть список и т. Д.
Как я могу установить соединение с внутренним и внешним хэш-картами?

Ответы [ 2 ]

3 голосов
/ 15 января 2012

Как насчет сохранения всего объекта в виде файла через ObjectOutputStream?Что-то вроде:

public static void saveObject(HashMap<String, HashMap<Integer, ArrayList<Integer>>> obj, String filePath)
{
    OutputStream os = null;
    try
    {
        os = new ObjectOutputStream(new FileOutputStream(filePath));
        os.writeObject(obj);
    }
    catch(Exception ex){}
    finally
    {
        os.close();
    }
}

Затем вы можете загрузить его следующим образом:

public static HashMap<String, HashMap<Integer, ArrayList<Integer>>> loadObject(String filePath)
{
    HashMap<String, HashMap<Integer, ArrayList<Integer>>> obj = null;
    InputStream is = null;
    try
    {
        is = new ObjectInputStream(new FileInputStream(filePath));
        obj = (HashMap<String, HashMap<Integer, ArrayList<Integer>>>) is.readObject();
    }
    catch(Exception ex){}
    finally
    {
        is.close();
    }
    return obj;
}

Обратите внимание, что вам нужно реализовать интерфейс Serializable для использования этой сериализации объекта.

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

Сериализует переменную inner, она позаботится о сериализации всех ссылок, которые она содержит внутри.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...