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);
【问题讨论】:
我相信这样的东西可以在 Java8Map<Integer, QueryStrings> 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?