循环列表以查找特定值
Loop over List for finding particular Value
我有一个巨大的字符串列表。字符串是 "ACCEPTED"、"OK" 或“NOT OK”。
如果列表包含一个 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";
}
此方法是否适用于大列表,还是我需要使用其他方法?
这基本上是一个问题 ArrayList.contains()
是否足够快。这已经在 SO 上得到了回答:
- Time complexity of contains(Object o), in an ArrayList of Objects
ArrayList.contains()
的时间复杂度为 O(n)
。用外行的话来说,性能是线性增长的。包含两倍项目的列表将花费两倍的时间来执行。这几乎和它得到的一样好,IMO 你不应该担心性能。
但正如 tom 所说,最好使用 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);
}
}
我有一个巨大的字符串列表。字符串是 "ACCEPTED"、"OK" 或“NOT OK”。
如果列表包含一个 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";
}
此方法是否适用于大列表,还是我需要使用其他方法?
这基本上是一个问题 ArrayList.contains()
是否足够快。这已经在 SO 上得到了回答:
- Time complexity of contains(Object o), in an ArrayList of Objects
ArrayList.contains()
的时间复杂度为 O(n)
。用外行的话来说,性能是线性增长的。包含两倍项目的列表将花费两倍的时间来执行。这几乎和它得到的一样好,IMO 你不应该担心性能。
但正如 tom 所说,最好使用 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);
}
}