Friday, June 1, 2012

In Java, how can I test if an Array contains a certain value?


I have a String[] with values like so:




public static final String[] VALUES = new String[] {"AB","BC","CD","AE"};



Given String s, is there a good way of testing whether VALUES contains s ?


Source: Tips4all

3 comments:

  1. Arrays.asList(...).contains(...)

    ReplyDelete
  2. Just to clear the code up to start with. We have (corrected):

    public static final String[] VALUES = new String[] {"AB","BC","CD","AE"};


    This is a mutable static which FidnBugs will tell you is very naughty. It should be private:

    private static final String[] VALUES = new String[] {"AB","BC","CD","AE"};


    (Note, you can actually drop the new String[]; bit.)

    So, reference arrays are bad, and in particular here we want a set:

    private static final Set<String> VALUES = new HashSet<String>(Arrays.asList(
    new String[] {"AB","BC","CD","AE"}
    ));


    (Paranoid people, such as myself, may feel more at ease if this was wrapped in Collections.unmodifiableSet - it could even be made public.)

    "Given String s, is there a good way of testing whether VALUES contains s?"

    VALUES.contains(s)


    O(1).

    ReplyDelete
  3. If the array is not sorted, you will have to iterate over everything and make a call to equals on each.

    If the array is sorted, you can do a binary search, there's one in the Arrays class.

    Generally speaking, if you are going to do a lot of membership checks, you may want to store everything in a Set, not in an array.

    ReplyDelete