当前位置: 首页 > 面试题库 >

创建arraylist哈希表的最佳方法

厉坚
2023-03-14
问题内容

我有一百万行.txt格式的数据。格式很简单。对于每一行:

用户1,值1
user2,value2
user3,value3
用户1,值4
...

你知道我的意思。对于每个用户,它可能出现很多次,或者只出现一次(您永远不会知道)。我需要找出每个用户的所有值。因为用户可能会随机出现,所以我使用了Hashmap来做到这一点。即:HashMap(键:字符串,值: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);

后续行动(20144月) -我在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]


 类似资料:
  • 问题内容: 我想获得像这样的Hashtable的JSON表示形式: 结果是: 但是,如果将JSON字符串转换回去,则不会得到HashTable,而会得到PSCustomObject。 那么,如何可靠地序列化上述Hashmap? 问题答案: $json = @{Path=”C:\temp”; Filter=”*.js”} | ConvertTo-Json

  • 我目前在我的Redis表中存储了大约50k个哈希,每个哈希都有5个键/值对。我每天运行一次批处理作业,更新散列值,包括将一些键值设置为散列中另一个键值。 下面是我的python代码,它迭代键,如果给定哈希存在新的\u代码值,则将旧的\u代码设置为新的\u代码: 我觉得有点奇怪,我必须迭代两次键才能获得相同的结果,有更好的方法吗? 另一件我想弄明白的事情是如何以最佳性能获取所有哈希值。以下是我目前的

  • 问题内容: 用Java创建哈希表(或关联数组…)的最直接方法是什么?我的google-fu提供了几个示例,但是有标准的方法吗? 有没有一种方法可以用键-值对的列表填充表,而无需为每个对分别在对象上调用add方法? 问题答案: 这两个类都可以从java.util包中找到。下面的jGuru FAQ条目 解释了两者之间的区别。

  • 问题内容: 我的应用程序中有一个添加用户选项。我想将用户密码以哈希格式存储在数据库中。密码以纯文本格式存储在框架随附的示例代码中。经过一番搜索,我发现在play2中实现了一个Crypto.encryptAES()函数,可用于保护密码。 我的问题是使用它的最佳地点是什么?以及如何使用它来创建最可维护的代码? 问题答案: 我个人将在模型中执行此操作。我的领域有吸气剂,所以在方法中: 该只是为多目的散列

  • 问题内容: 当大小超过maxthreshold值时,如何在哈希表或哈希表中进行重新哈希处理? 是否所有对都已复制到新的存储桶阵列中? 编辑: 重新哈希后,同一存储桶(位于链接列表中)中的元素会发生什么情况?我的意思是说,他们在重新哈希处理后会留在同一个桶中吗? 问题答案: 问题中的最大阈值称为负载系数。 建议负载系数约为0.75。负载因子定义为(m / n),其中n是哈希表的总大小,m是在需要增加

  • 问题内容: 按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我一直在阅读有关使用PHP创建PDF文件的信息,并且想知道最简单的选择是什么。 创建PDF模板,将其打开并替换占位符文本-我应使用哪个功能打开现有PDF进行编辑