【问题标题】:Data structure for array of string arrays in javajava中字符串数组的数据结构
【发布时间】:2014-09-28 11:06:33
【问题描述】:

我检查了其他问题并谷歌搜索,但没有根据我的要求找到正确的答案。

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

现在用户可以提供:

id: 123
marks: 12, 13, 14

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

等待您的肯定答复。

【问题讨论】:

  • 尝试Map<Integer,Set<Integer>,其中123 是键,[12,13,14] 是值
  • 但是我的键和值都必须是字符串

标签: java arrays list arraylist multidimensional-array


【解决方案1】:

您可以只使用普通的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);
}

或者,如果您可以使用库,您可能希望查看Commons Collections 中的MultiValueMap

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);
}

两个代码sn-ps都会打印出来:

value1
value3

如您所见,MultiValueMap 版本略短,省去了检查密钥是否已存在并自己显式获取列表的麻烦。

【讨论】:

  • 你能举例说明我将如何添加或删除东西吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-05
  • 2011-08-26
  • 1970-01-01
  • 1970-01-01
  • 2011-08-04
  • 2015-07-09
相关资源
最近更新 更多