java - 创建arraylist HashMap 的最佳方法

标签 java data-structures collections arraylist hashmap

我有一百万行 .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/

相关文章:

php - 在 MySQL 中存储动态数据和数据类型

java - `TreeSet` 的可订购性可靠性

java - Deitel Java 练习 6.30

java - 多线程中的 SNMP Walk

java - 使用 2 个 jframe 的 Swing Jframe

java - 加载 Activity 时出现NoClassDefFoundError

java - Java中的嵌套数据结构(内部类)

java - 是否有理由使用字符串 => 索引到 vector 的映射,而不是字符串 => 对象?

powershell - System.Collections.ArrayList 变为 System.Collecits.HashTable

除列表之外的序列上的 Scala 模式匹配