循环列表以查找特定值

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);

    }
}