正在尝试将两个数组与arrays.contains Java进行比较
我试图查看数组中的元素是否包含在其他数组中。我不想为此使用嵌套for循环,我很好奇为什么我的正在尝试将两个数组与arrays.contains Java进行比较,java,arrays,contains,java-8,Java,Arrays,Contains,Java 8,我试图查看数组中的元素是否包含在其他数组中。我不想为此使用嵌套for循环,我很好奇为什么我的.contains不起作用 目前我有两个数组 double [] s2 = new double [4]; double [] match = new double [s2.length]; 我试图测试s2是否包含我的match数组中的任何值 for (j = 0; j < s2.length; j++) { if(Arrays.asList(s2).co
.contains
不起作用
目前我有两个数组
double [] s2 = new double [4];
double [] match = new double [s2.length];
我试图测试s2
是否包含我的match
数组中的任何值
for (j = 0; j < s2.length; j++)
{
if(Arrays.asList(s2).contains(match[j])){
return true;
}
}
for(j=0;j
这与我使用的双数据类型有关吗?如果是这样的话,我还有什么办法可以使用
.contains
问题在于数组。asList(s2)
不会像您预期的那样返回List
对象
它返回一个列表
对象。因此,该数组中的元素将是double[]
类型
泛型不能很好地处理基元类型
解决方案是将
double[]
转换为double[]
的某个地方。解决具体问题:数组。asList
不会创建元素的列表,而是创建一个只有一个值的列表(索引0处)元素的double[]
。您应该自己对列表进行第二次for
循环,而不是创建不同的对象
它可以通过操作()来完成,而不是使用循环,尽管差别应该很小
DoubleStream.of(s2) // Pipe the source array
.distinct() // Remove duplicate elements
// as they only need to be matched against once
.anyMatch(value -> // Consider if any value matches this condition
IntStream.of(match) // It equals any value in "match"
.distinct() // after removing duplicate elements
.anyMatch(matchValue -> matchValue == value));
有关流的更多信息,请参阅以下Oracle文章:使用Java SE 8流处理数据,您不想使用嵌套循环的任何特定原因?您使用的是嵌套循环,您只是通过contains
间接使用(并且在每次传递时为s2
创建一个新的列表包装器)有趣的是,我现在不知道@chrylis,那么这会给我一个运行时间O(n^2)吗?因为它现在将是一个运行n次的嵌套循环。您想检查s2
中的任何元素是否在匹配中?还有其他一些更好的big-O替代方案,例如先排序一个,但常数通常会下降,而只会循环两次。作为解决方案,用户应该使用数组。asList
@Unihedron不起作用。asList不会接受那样的double[]
。编译错误:)啊,你是对的,我认为参数会适应是错误的。我的错!