3 回答

TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊
用Set做一個(gè)myRoles和hasRoles的并集,然后判斷這個(gè)并集的大小是不是等于myRoles和hasRoles的大小相加,如果不是的話,可定有重復(fù)了。
Java代碼
Set<String> totalRoles = new HashSet<String>();
List<String> myRoles = new ArrayList<String>();
List<String> hasRoles = new ArrayList<String>();
public boolean hasRole()
{
// you can use addAll()
for (String my : myRoles)
{
totalRoles.add(my);
}
// you can use addAll()
for (String role : hasRoles)
totalRoles.add(role);
}
return totalRoles.size()==(myRoles.size()+hasRoles.size());
}
查看下ArrayList.retainAll 和removeAll本質(zhì)上都做了兩個(gè)for循環(huán)

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
你的最佳答案必須循環(huán)M+N次
但是第二個(gè)答案最壞情況下是M+N,而且沒有任何問題,不管List數(shù)據(jù)是否重復(fù)
但是你的最佳答案就不行了。

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個(gè)贊
為什么要用雙層循環(huán)?樓下的想到的辦法不敢恭維,首先想到的應(yīng)該是API的list的contains方法把
for (String my : myRoles){
if(hasRoles.contains(my)){
return true;
}
}
return false;
添加回答
舉報(bào)