Java:有效地将列表中的项目放入 HashMap [重复]

Posted

技术标签:

【中文标题】Java:有效地将列表中的项目放入 HashMap [重复]【英文标题】:Java: Putting items from List into HashMap efficiently [duplicate] 【发布时间】:2017-12-02 15:34:14 【问题描述】:

我这里有一个清单:

List<QueryStrings> queryStrings

而 QueryStrings 只是一个简单的类

public class QueryStrings 
    private Integer id;
    private String rel;
    private String impl;

我需要将 List 放入一个 HashMap 中,其中 id 将是关键,我现在正在这样做,一次循环一个 List :

HashMap<Integer, QueryStrings> queryMap = new HashMap<>();
for (QueryStrings element : queryStrings) 
    Integer thisId = Integer.parseInt(element.getId());
    queryMap.put(thisId, element);

有没有更好的方法呢?我不想循环每个项目,这可能吗?

编辑:

对不起,我不应该解析整数,所以代码应该是这样的:

HashMap<Integer, QueryStrings> queryMap = new HashMap<>();
for (QueryStrings element : queryStrings) 
    queryMap.put(element.getId(), element);

【问题讨论】:

我相信这样的东西可以在 Java8 Map&lt;Integer, QueryStrings&gt; queryMap = queryStrings.stream().collect(toMap(element.getId(), element)); 为什么要打电话给parseInt()id 已经是Integer 类型了,直接用ID就好了。 @ScaryWombat id 是 Interger 对吗?为什么我们需要解析 减去当前答案中提到的额外调用,循环与任何其他方法一样“有效”。定义“更好的方式”。 这个不用担心。只要哈希码不退化,您就可以每秒将数百万个项目填充到 HashMap 中。 【参考方案1】:

如果 int 已经是 int,则不要解析它!

HashMap<Integer, QueryStrings> queryMap = new HashMap<>();
for (QueryStrings element : queryStrings) 
    queryMap.put(element.getId(), element);

也就是说,如果是 Java 8,您可以使用更简洁的语法,尽管性能差异很小。

list.stream().collect(Collectors.toMap(QueryStrings::getId, Function.identity()));

【讨论】:

他的课程确实将其显示为整数 没听懂 - 绝对更好的方法是不要从 Integer -> String -> Integer :-)

以上是关于Java:有效地将列表中的项目放入 HashMap [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何有效地将项目添加到 Chrome 存储 API 中的数组?

如何正确地将不可滚动的 UITableView 放入 UIScrollView?

如何有效地将用户添加到 GitLab 中的所有项目(以编程方式或其他方式)

获取 HashMap 中具有“某个值”之类的键的键列表

将JFrame对象类作为值传递给java中的HashMap

如何有效地将具有一定周期性的列表拆分为多个列表?