for嵌套慢的问题

a21768541 2019-01-25 04:51:40

List<Long> idList = new ArrayList<>();//用于保存团队用户ID
idList.add(user.getId());
for(User newUser : allUser){
for(Long invUser : idList){
if(invUser.equals(newUser.getInviter())){
idList.add(newUser.getId());//添加进团队
break;
}
}
}

获取团队成员的时候,数据量大的时候,很慢,请问大神们,有什么好的办法优化
...全文
136 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
鸣鸣Amadues 2019-01-25
  • 打赏
  • 举报
回复
你这个是双重循环遍历查找,要提高效率的话,在第二个for里使用二分查询(预先排序),会快不少。
_小石头_ 2019-01-25
  • 打赏
  • 举报
回复
如果用的jdk8 建议你使用stream()去做集合的这种操作 会快很多
  • 打赏
  • 举报
回复

利用这个方法取出二个集合中需要比较的字段,形成二个set
public static Set<String> putSet(List<Map<String, Object>> list, String field) {
Set<String> set = new HashSet<String>();
for (Map<String, Object> map : list) {
set.add(MapUtil.getStringValue(map, field));
}
return set;
}

/**
*<p>@description: 求交集</p>
*/
public static Set<String> intersectionSet(Set<String> setA,Set<String> setB){
Set<String> setACopy = new HashSet<String>();
setACopy.addAll(setA);
setACopy.retainAll(setB);
return setACopy;
}


利用上述intersectionSet方法求出二个set之间的交集就可以得到团队成员的id了

这种方法只需要遍历数组一次,是不会有效率问题的

67,516

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧