我有一个包含我从数据库中检索到的所有组的HashSet。我被要求通过删除两个特定组来过滤此结果。这似乎微不足道,但我似乎无法想出一个可靠的解决方案来存储我想要过滤的特定组。
我的想法是创建一个包含对我需要过滤掉的两个组的引用的数组。然后,我可以使用数组中的任何内容过滤掉我的搜索查询。我担心的是,将来他们可能会要求过滤掉更多的群组,也许阵列可能不是一个好主意。
//Creates the array containing groups to filter out
String[] hiddenGroups = {"group1","group2"};
//retrieves all groups
Set<String>allGroups = new HashSet<String>();
allGroups.addAll(authorityService.getAllAuthorities(AuthorityType.GROUP);
List<String>results = new ArrayList<String>();
//filters out specified groups
for (String group : allGroups) {
boolean isHidden = false;
for (String hiddenGroup : hiddenGroups) {
if (hiddenGroup.equalsIgnorecase(group)) {
isHidden = true;
}
}
if (!isHidden){
results.add(group);
}
}
答案 0 :(得分:1)
在HashSet中查找元素可以在恒定时间内完成。因此,您可以通过不循环遍历HashSet中的元素来提高代码的效率,而是在整个集合中工作并删除字符串,因为您发现它们包含在整个集合中。
//Creates the array containing groups to filter out
String[] hiddenGroups = {"group1","group2"};
//retrieves all groups
Set<String>allGroups = new HashSet<String>();
allGroups.addAll(authorityService.getAllAuthorities(AuthorityType.GROUP);
Set<String>results = allGroups.clone();
//filters out specified groups
for (String group : hiddenGroups) {
if (allGroups.contains(group)) {
results.remove(group);
}
}
即使存在大量群体,这也会很快,因为每个群体都会在恒定时间内被查找。