在HashMap中的StringList中添加动态内容

时间:2013-02-17 16:08:37

标签: java arraylist hashmap

我正在尝试用Java创建一个内容管理系统,我在其中插入章节名称并在章节中创建章节。我使用了以下数据结构:

static ArrayList<String> chapters = new ArrayList<String>();
static Map<String,ArrayList<String>> subsections = new HashMap<String,ArrayList<String>>();

现在,为了插入,我使用以下代码:

ArrayList<String> secname = new ArrayList<String>();
secname.add(textField.getText());
MyClass.subsections.put("Chapter", secname);

问题是我得到了最后一个元素,其余元素被覆盖了。但是,我不能使用固定的ArrayList作为章节。我必须从GUI插入字符串运行时。我该如何克服这个问题?

2 个答案:

答案 0 :(得分:1)

是的,每次都会创建一个新的 arraylist。您需要检索现有的一个,如果有的话,并添加到它。类似的东西:

List<String> list = MyClass.subsections.get("Chapter");
if (list == null) {
    list = new ArrayList<String> ();
    MyClass.subsections.put("Chapter", list);
}
list.add(textField.getText());

答案 1 :(得分:1)

首先必须从地图中获取包含子部分的ArrayList:

ArrayList<String> section = subsections.get("Chapter");

然后只有在它不存在时才创建它:

if (section == null) {
    ArrayList<String> section = new ArrayList<String>();
    subsections.put("Chapter", section);
}

然后将文字附在该部分的末尾:

section.add(textField.getText());

每次调用“put”时,您的代码都会替换索引“Chapter”处的ArrayList,可能会删除此索引中以前保存的数据。