Ccna final exam - java, php, javascript, ios, cshap all in one. This is a collaboratively edited question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.
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 ?
Arrays.asList(...).contains(...)
ReplyDeleteJust to clear the code up to start with. We have (corrected):
ReplyDeletepublic 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).
If the array is not sorted, you will have to iterate over everything and make a call to equals on each.
ReplyDeleteIf 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.