我有一个列表巨大的字符串列表。字符串是“接受”,“确定”或“不行”。
如果列表包含一个ACCEPTED
,则最终值应为ACCEPTED
,不管其他值如何。如果没有ACCEPTED
但有OK
,则最终值应为OK
。如果它们都不显示,则最终值应为NOT OK
。
我可以使用String.contains()
方法检查包含某些字符串的值,但是我有一个庞大的列表。因此,我担心它会导致性能问题。
if(s.contains(("ACCEPTED"))) {
value= "ACCEPTED";
break;
} else if(s.contains(("OK"))) {
value= "OK";
break;
} else {
value= "NOT OK";
}
此方法适用于大型列表,还是需要使用其他内容?
答案 0 :(得分:1)
如果ArrayList.contains()
足够快,这基本上是一个问题。这已经在SO上得到了回答:
ArrayList.contains()
的时间复杂度为O(n)
。通俗地说,绩效是线性的。包含两倍项目的列表将花费两倍的时间来执行。这几乎和它一样好,IMO你不应该担心性能。
但正如汤姆所说,最好使用Set
,根据定义,它不会存储重复值。
编辑:
以下是工作代码示例,您也可以对其进行测试here:
import java.util.*;
class myCode
{
public static void main (String[] args) throws java.lang.Exception
{
ArrayList<String> testList = new ArrayList<String>();
String s1 = new String ("ACCEPTED");
String s2 = new String ("OK");
String s3 = new String ("NOT OK");
testList.add(s1);
testList.add(s2);
testList.add(s3);
String status= "";
if(testList.contains("ACCEPTED")) {
status= "ACCEPTED";
}
else if(testList.contains("OK")) {
status= "OK";
}
else {
status= "NOT OK";
}
System.out.println(status);
}
}