我有一百万行 .txt 格式的数据。格式非常简单。对于每一行:
user1,value1 user2,value2 user3,value3 user1,value4 ...
你知道我的意思。对于每个用户,它可能出现多次,或者只出现一次(你永远不知道)。我需要找出每个用户的所有值。因为用户可能随机出现,所以我使用 Hashmap 来做。即:HashMap(key: String, value: ArrayList)。但是要向arrayList添加数据,我必须不断地使用HashMap get(key)来获取arrayList,给它添加值,然后把它放回HashMap。我觉得效率不是很高。有人知道更好的方法吗?
最佳答案
您无需将 ArrayList 重新添加回您的 map 。如果 ArrayList 已经存在,那么只需将您的值添加到它。
改进的实现可能如下所示:
Map<String, Collection<String>> map = new HashMap<String, Collection<String>>();
在处理每一行时:
String user = user field from line
String value = value field from line
Collection<String> values = map.get(user);
if (values==null) {
values = new ArrayList<String>();
map.put(user, values)
}
values.add(value);
2014 年 4 月跟进 - 我在 2009 年写了原始答案,当时我对 Google Guava 的了解有限。鉴于 Google Guava 所做的一切,我现在建议使用它的 Multimap
而不是重新发明它。
Multimap<String, String> values = HashMultimap.create();
values.put("user1", "value1");
values.put("user2", "value2");
values.put("user3", "value3");
values.put("user1", "value4");
System.out.println(values.get("user1"));
System.out.println(values.get("user2"));
System.out.println(values.get("user3"));
输出:
[value4, value1]
[value2]
[value3]
关于java - 创建arraylist HashMap 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1010879/