循环列表以查找特定值

时间:2017-06-10 22:04:48

标签: java string list iterate

我有一个列表巨大的字符串列表。字符串是“接受”,“确定”或“不行”。

如果列表包含一个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";
            }

此方法适用于大型列表,还是需要使用其他内容?

1 个答案:

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

    }
}