Cal*_*leb 82 java arrays int contains
基本上我的伙伴一直在说我可以通过使用一种不同的方式检查一个int数组是否包含int来缩短我的代码,尽管他不会告诉我它是什么:P.
当前:
public boolean contains(final int[] array, final int key) {
for (final int i : array) {
if (i == key) {
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
也试过这个,虽然它总是由于某种原因返回false.
public boolean contains(final int[] array, final int key) {
return Arrays.asList(array).contains(key);
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我吗?
谢谢.
Rei*_*eus 56
你可以简单地使用ArrayUtils.contains从Apache Commons Lang library.
public boolean contains(final int[] array, final int key) {
return ArrayUtils.contains(array, key);
}
Run Code Online (Sandbox Code Playgroud)
Tom*_*icz 33
这是因为Arrays.asList(array)回归List<int[]>.array参数被视为要包装的一个值(获取整数数组的列表),而不是vararg.
请注意,它确实适用于对象类型(而不是基元):
public boolean contains(final String[] array, final String key) {
return Arrays.asList(array).contains(key);
}
Run Code Online (Sandbox Code Playgroud)
甚至:
public <T> boolean contains(final T[] array, final T key) {
return Arrays.asList(array).contains(key);
}
Run Code Online (Sandbox Code Playgroud)
但你不能拥有List<int>和autoboxing在这里工作.
Tri*_*ore 24
这是Java 8解决方案
public static boolean contains(final int[] arr, final int key) {
return Arrays.stream(arr).anyMatch(i -> i == key);
}
Run Code Online (Sandbox Code Playgroud)
小智 18
Guava为原始类型提供了额外的方法.其中包含一个包含与你相同的参数的方法.
public boolean contains(final int[] array, final int key) {
return Ints.contains(array, key);
}
Run Code Online (Sandbox Code Playgroud)
您也可以静态导入番石榴版本.
参见番石榴原始解释
Cra*_*lus 15
另一种方式:
public boolean contains(final int[] array, final int key) {
Arrays.sort(array);
return Arrays.binarySearch(array, key) >= 0;
}
Run Code Online (Sandbox Code Playgroud)
这会修改传入的数组.你可以选择复制数组并处理原始数组,int[] sorted = array.clone();
但这只是一个简短代码的例子.运行时就是O(NlogN)你的方式O(N)
| 归档时间: |
|
| 查看次数: |
209471 次 |
| 最近记录: |