为了账号安全,请及时绑定邮箱和手机立即绑定

如下代码,求改进的方法

如下代码,求改进的方法

白板的微信 2022-09-17 15:11:27

Java代码  

  1. List<String> myRoles = new ArrayList<String>();  

  2. List<String> hasRoles = new ArrayList<String>();  

  3.   

  4. public boolean hasRole()  

  5. {  

  6.     for (String my : myRoles)  

  7.     {  

  8.     for (String role : hasRoles)  

  9.         {  

  10.         if(my.equals(role))  

  11.         {  

  12.             return true;  

  13.         }  

  14.     }  

  15.     }  

  16.       

  17.     return false;  

  18. }  

上面方面的逻辑是:myRoles集合中的字符串,只要有一个在hasRoles集合中存在,就返回true
但是,这个方法嵌套了2层for循环,效率似乎很低


查看完整描述

3 回答

?
猛跑小猪

TA贡献1524条经验 获得超8个赞

用Set做一个myRoles和hasRoles的并集,然后判断这个并集的大小是不是等于myRoles和hasRoles的大小相加,如果不是的话,可定有重复了。

Java代码  

  1. Set<String> totalRoles = new HashSet<String>();  

  2. List<String> myRoles = new ArrayList<String>();    

  3. List<String> hasRoles = new ArrayList<String>();    

  4.     

  5. public boolean hasRole()    

  6. {    

  7.     // you can use addAll()  

  8.     for (String my : myRoles)    

  9.     {    

  10.       totalRoles.add(my);  

  11.     }  

  12.     // you can use addAll()  

  13.     for (String role : hasRoles)    

  14.       totalRoles.add(role);       

  15.     }    

  16.     return totalRoles.size()==(myRoles.size()+hasRoles.size());  

  17. }   

查看下ArrayList.retainAll 和removeAll本质上都做了两个for循环


查看完整回答
反对 回复 2022-09-21
?
ABOUTYOU

TA贡献0条经验 获得超5个赞

你的最佳答案必须循环M+N次
但是第二个答案最坏情况下是M+N,而且没有任何问题,不管List数据是否重复
但是你的最佳答案就不行了。

查看完整回答
反对 回复 2022-09-21
?
心有法竹

TA贡献1551条经验 获得超5个赞

为什么要用双层循环?楼下的想到的办法不敢恭维,首先想到的应该是API的list的contains方法把
for (String my : myRoles){
   if(hasRoles.contains(my)){
      return true;
   }
}
return false;

查看完整回答
反对 回复 2022-09-21

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信