[英]Iterating through array - java
我想知道是否有更好的方法,并将Array
传递给该方法,或者每当我想检查数字是否在array
时将其写出来。
例如:
public static boolean inArray(int[] array, int check) {
for (int i = 0; i < array.length; i++) {
if (array[i] == check)
return true;
}
return false;
}
我在这里先向您的帮助表示感谢!
从至少Java 1.5.0(Java 5)开始,代码可以被清理一下。 Array
和任何实现Iterator
东西(例如Collection
s)可以循环使用:
public static boolean inArray(int[] array, int check) {
for (int o : array){
if (o == check) {
return true;
}
}
return false;
}
在Java 8中,您还可以执行以下操作:
// import java.util.stream.IntStream;
public static boolean inArray(int[] array, int check) {
return IntStream.of(array).anyMatch(val -> val == check);
}
尽管为此转换为流可能有点过分。
您绝对应该将此逻辑封装到方法中。
多次重复相同的代码没有任何好处。
此外,如果将逻辑放在方法中并且更改,则只需在一个位置修改代码。
您是否想要使用第三方库是一个完全不同的决定。
如果您正在使用数组(并且纯粹是数组),则“包含”的查找是O(N)
,因为最坏的情况是,您必须迭代整个数组。 现在,如果数组已排序,您可以使用二进制搜索,这会减少使用排序开销的log(N)
的搜索时间。
如果这是重复调用的内容,请将其放在函数中:
private boolean inArray(int[] array, int value)
{
for (int i = 0; i < array.length; i++)
{
if (array[i] == value)
{
return true;
}
}
return false;
}
您可以导入lib org.apache.commons.lang.ArrayUtils
有一个静态方法,您可以传入一个int数组和一个值来检查。
contains(int [] array,int valueToFind)检查值是否在给定数组中。
ArrayUtils.contains(intArray, valueToFind);
使用java 8 Stream API可以简化您的工作。
public static boolean inArray(int[] array, int check) {
return Stream.of(array).anyMatch(i -> i == check);
}
只是你有从Array
创建一个新Stream
的开销,但是这会暴露使用其他Stream
API。 在您的情况下,您可能不希望为单行操作创建新方法,除非您希望将其用作实用程序。 希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.