arraylist在特定索引处修改

时间:2014-01-24 10:36:58

标签: java arraylist

我有两个ArrayLists。如下例所示。

ArrayList<String> listVarName = new ArrayList<String>();
ArrayList<String> listVarValue = new ArrayList<String>();

listVarName.add("One");
listVarName.add("Two");
listVarName.add("Three");
listVarName.add("Four");

listVarValue.add("Content of One");
listVarValue.add("Content of Two");
listVarValue.add("Content of Three");
listVarValue.add("Content of Four");

//Code to append the value
int index = listVarName.indexOf("Two");
String oldVal = listVarValue.get(index);
listVarValue.remove(index);
listVarValue.add(index, oldVal+" APPENDED TEXT");

System.out.println(listVarName.toString());
System.out.println(listVarValue.toString());

输出在追加之前:

[One, Two, Three, Four]
[Content of One, Content of Two, Content of Three, Content of Four]

追加后的输出:

[One, Two, Three, Four]
[Content of One, Content of Two APPENDED TEXT, Content of Three, Content of Four]

在上面的代码 listVarName key listVarValue value

所以我试图追加 listVarValue,其索引与listVarName的索引相匹配。所以我得到listVarValue的旧值并为其添加新值,然后从列表中删除旧值并将新值插入其旧位置。

以上代码工作正常。我的问题是,有没有更好的方法,而不是我用来附加值的代码?

3 个答案:

答案 0 :(得分:2)

您也可以使用Map<String,String>代替2 ArrayList。最后,您可以通过调用keySet()values()

将它们作为集合单独获取
    Map<String, String> map = new LinkedHashMap<String, String>();
    map.put("one", "Content of One");
    map.put("Two", "Content of Two");
    map.put("Three", "Content of Three");
    map.put("Four", "Content of Four");

    map.put("Two", map.get("Two") + " APPEND TEXT");
    System.out.println(map.values());

答案 1 :(得分:1)

假设你关注列表修改而不是一般结构,是的 - 有更好的方法。

使用List.set(index, element)

,而不是使用remove然后使用add
String oldVal = listVarValue.get(index);
listVarValue.set(index, oldVal + " APPENDED TEXT");

除了更简单的代码之外,这也更有效 - 在ArrayList中添加和删除每个都涉及将支持数组中所有其余元素复制到新位置 - 而set只是涉及更改后备阵列中的单个元素。

答案 2 :(得分:1)

而不是这两行

listVarValue.remove(index);
listVarValue.add(index, oldVal+" APPENDED TEXT");

您可以使用

listVarValue.set(index,oldVal+" APPENDED TEXT")