我有一个String[],其值如下:
public static final String[] VALUES = new String[] {"AB","BC","CD","AE"};
给定字符串s,是否有一种测试VALUES是否包含s的好方法?
我有一个String[],其值如下:
public static final String[] VALUES = new String[] {"AB","BC","CD","AE"};
给定字符串s,是否有一种测试VALUES是否包含s的好方法?
当前回答
对于有限长度的阵列,请使用以下内容(由camickr提供)。这对于重复检查来说是缓慢的,特别是对于较长的阵列(线性搜索)。Arrays.asList(…).incontains(…)如果您重复检查一组较大的元素,则可获得快速性能数组结构错误。使用TreeSet并将每个元素添加到其中。它对元素进行排序,并具有快速的exist()方法(二进制搜索)。如果元素实现Comparable,则需要对TreeSet进行相应排序:ElementClass.compareTo()方法必须与ElementClass.equals()兼容:是否看到三合会未出现战斗?(Java Set缺少项目)TreeSet myElements=新TreeSet();//对每个元素执行此操作(实现*可比*)myElements.add(nextElement);//*或者*,如果从其他代码强制提供数组:myElements.addAll(Arrays.asList(myArray));否则,请使用您自己的比较器:类MyComparator实现Comparator<ElementClass>{int compareTo(ElementClass元素1;ElementClass元素2){//元素的比较//应与对象相等性一致}布尔等于(对象otherComparator){//您的比较器相等}}//用比较器构造TreeSetTreeSet myElements=新TreeSet(新MyComparator());//对每个元素执行此操作(实现*可比*)myElements.add(nextElement);回报:检查某些元素的存在://通过排序元素进行快速二进制搜索(性能~日志(大小)):boolean containsElement=myElements.exists(someElement);
其他回答
开发人员通常会:
Set<String> set = new HashSet<String>(Arrays.asList(arr));
return set.contains(targetValue);
上面的代码可以工作,但不需要先将列表转换为set。将列表转换为集合需要额外的时间。它可以简单到:
Arrays.asList(arr).contains(targetValue);
or
for (String s : arr) {
if (s.equals(targetValue))
return true;
}
return false;
第一个比第二个更可读。
尝试使用Java 8谓词测试方法
这是一个完整的例子。
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
public class Test {
public static final List<String> VALUES =
Arrays.asList("AA", "AB", "BC", "CD", "AE");
public static void main(String args[]) {
Predicate<String> containsLetterA = VALUES -> VALUES.contains("AB");
for (String i : VALUES) {
System.out.println(containsLetterA.test(i));
}
}
}
http://mytechnologythought.blogspot.com/2019/10/java-8-predicate-test-method-example.html
https://github.com/VipulGulhane1/java8/blob/master/Test.java
创建初始设置为false的布尔值。运行一个循环来检查数组中的每个值,并与要检查的值进行比较。如果找到匹配项,请将布尔值设置为true并停止循环。然后断言布尔值为真。
您可以直接使用Arrays.asList方法以类似的方式将其初始化为List,而不是使用快速数组初始化语法,例如:
public static final List<String> STRINGS = Arrays.asList("firstString", "secondString" ...., "lastString");
然后您可以执行(如上所述):
STRINGS.contains("the string you want to find");
当我使用基本类型byte和byte[]处理低级Java时,迄今为止我得到的最好的结果是byte-Javahttps://github.com/patrickfav/bytes-java看起来是件很好的工作