java比较两个列表寻找更快更高效的方法
我正在寻找一种更好的方法来比较两个“列表”。这个想法是:我有两个由字符串组成的列表。如果两个列表中的所有字符串都匹配,则我的方法返回true。即
List(1) = "foo, foo1, foo2, foo3"
List(2) = "foo, foo1, foo2, foo3"
比较这两个列表时,如果所有字符串都匹配,则该方法返回true。如果任何元素不匹配,则返回false
我拥有的(和使用的)代码是这样的:然而我只是想知道是否有人能想出一个更好的解决方案来解决这个问题
private boolean match(Context messageContext, ContextRule contextRule) {
if(contextRule.getMessageContext().getUser().equals(ContextRuleEvaluator.WILDCARD)
|| (contextRule.getMessageContext().getUser().equals(messageContext.getUser()))) {
if(contextRule.getMessageContext().getApplication().equals(ContextRuleEvaluator.WILDCARD)
|| (contextRule.getMessageContext().getApplication().equals(messageContext.getApplication()))) {
if(contextRule.getMessageContext().getService().equals(ContextRuleEvaluator.WILDCARD)
|| (contextRule.getMessageContext().getService().equals(messageContext.getService()))) {
if(contextRule.getMessageContext().getOperation().equals(ContextRuleEvaluator.WILDCARD)
|| (contextRule.getMessageContext().getOperation().equals(messageContext.getOperation()))) {
return true;
}
}
}
}
return false;
}
上下文
public interface Context {
public String getUser();
public void setUser(String user);
public String getApplication();
public void setApplication(String application);
public String getService();
public void setService(String service);
public String getOperation();
public void setOperation(String operation);
}
上下文规则
public interface ContextRule {
public Context getMessageContext();
public int getAllowedConcurrentRequests();
}
# 1 楼答案
您可以做什么(但会添加不必要的对象创建):
这是可能想出许多变种,但我认为这将是难以利用的名单。等于(),因为您需要考虑通配符
我会用更简洁的形式重写原始检查,利用助手减少冗余,例如
# 2 楼答案
我认为,通过一点重构和应用DRY,您的方法将与任何其他方法一样有效:
将匹配逻辑移到
Context
类中:然后使用它:
# 3 楼答案
列表实现覆盖equals方法
是否有不使用此功能的要求
javadoc:
这将执行上面的前两个操作,并调用每个元素。等于(…)将方法传递给其他人。因此,请确保已正确重写元素中的equals方法