基本上,我的伙伴一直在说,我可以通过使用不同的方法来检查int数组是否包含int来缩短代码,尽管他不会告诉我它是什么:p。
电流:
public boolean contains(final int[] array, final int key) {
for (final int i : array) {
if (i == key) {
return true;
}
}
return false;
}
我也尝试过这个方法,尽管由于某些原因它总是返回false。
public boolean contains(final int[] array, final int key) {
return Arrays.asList(array).contains(key);
}
有人能帮我吗?
谢谢您。
14条答案
按热度按时间t1qtbnec1#
您可以使用下面的java 8代码将原始int数组转换为整数数组列表,
然后使用
contains()
方法来检查列表是否包含特定元素,nhjlsmyf2#
解决方案#1
由于最初的问题只需要一个简化的解决方案(而不是更快的解决方案),这里有一个单行解决方案:
说明:javadoc of
Arrays.toString()
状态结果用方括号括起来,相邻元素用字符“,”(逗号后跟空格)分隔。所以我们可以指望这个。首先我们皈依array
然后我们检查key
包含在此字符串中。当然,我们不能接受“子编号”(例如,“1234”包含“23”),因此我们必须寻找key
前有一个左括号或空格,后有一个右括号或逗号。注意:所使用的regexp模式还可以正确地处理负数(其字符串表示形式以减号开头)。
解决方案#2
此解决方案已发布,但包含错误,因此我发布正确的解决方案:
这个解决方案还有一个副作用:它修改了
array
(排序)。ujv3wf0j3#
我知道已经很晚了,但是试试看
Integer[]
而不是int[]
.brqmpdu14#
是因为
Arrays.asList(array)
返回List<int[]>
.array
参数被视为要 Package 的一个值(得到int数组的列表),而不是vararg。请注意,它确实适用于对象类型(而不是基本体):
甚至:
但你不能
List<int>
自动装箱在这里不起作用。cwxwcias5#
下面是Java8解决方案
yrefmtwq6#
你可以用
java.util.Arrays
类来转换数组T[?]
在一个List<T>
对象的方法,如contains
:blpfk2vs7#
根据int数组的大小,如果使用集合和
.contains
而不是一次迭代数组中的一个元素:vnjpjtjt8#
这在Java8中起作用
aor9mmx19#
你可以用
ArrayUtils.contains
从Apache Commons Lang library
.alen0pnh10#
尝试
Integer.parseInt()
为此。。。。。ulydmbyx11#
guava为原始类型提供了额外的方法。其中包含一个方法,该方法采用与您相同的参数。
您不妨静态地导入guava版本。
见Guava原语解释
vd2z7a6w12#
另一种方式:
这将修改传入的数组。您可以选择复制数组并处理原始数组,即。
int[] sorted = array.clone();
但这只是一个简短代码的例子。运行时是O(NlogN)
当你的方式是O(N)
smdncfj313#
1.一次性使用
2.如果您使用多次,请出于性能考虑使用hashset。
o3imoua414#
试试这个: