java中字符串数组数组的数据结构

时间:2014-08-05 17:19:08

标签: java arrays list arraylist multidimensional-array

我检查了其他问题并用Google搜索,但根据我的要求找不到合适的答案。

这是网络应用,我正在使用休息服务。我有一个班级Request,它有一个属性RequestedAttrbs。用户必须在请求中发送RequestAttrbs及其值,我必须存储它们。

现在用户可以提供:

id: 123
marks: 12, 13, 14

问题是用户可以提供多个属性,并且可以为每个属性提供多个值。哪种数据结构最适合处理? 我是java的新手,想要解决这个问题。

等待你的肯定回复。

1 个答案:

答案 0 :(得分:2)

您可以使用普通Map<String, List<String>>类型,例如:

String key = "keyValue";
String value1 = "value1";
String value2 = "value2";
String value3 = "value3";

Map<String, List<String>> requestAttrbs1 = new HashMap<String, List<String>>();

if (!requestAttrbs1.containsKey(key)) {
    requestAttrbs1.put(key, new ArrayList<String>());
}
requestAttrbs1.get(key).add(value1);
requestAttrbs1.get(key).add(value2);
requestAttrbs1.get(key).add(value3);

requestAttrbs1.get(key).remove(value2);

for (String value : requestAttrbs1.get(key)) {
    System.out.println(value);
}

或者,如果您可以使用库,则可能需要查看MultiValueMap中的Commons Collections

MultiValueMap<String, String> requestAttrbs2 = new MultiValueMap<String, String>();

requestAttrbs2.put(key, value1);
requestAttrbs2.put(key, value2);
requestAttrbs2.put(key, value3);

requestAttrbs2.removeMapping(key, value2);

for (String value : requestAttrbs2.getCollection(key)) {
    System.out.println(value);
}

两个代码段都会打印出来:

value1
value3

正如您所看到的,MultiValueMap版本稍微短一些,省去了检查密钥是否已存在并自行明确获取列表的麻烦。