基本上我的伙伴一直在说我可以通过使用不同的方式检查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);
}
有人可以帮帮我吗?
谢谢。
答案 0 :(得分:55)
您只需使用Apache Commons Lang library
中的ArrayUtils.contains
。
public boolean contains(final int[] array, final int key) {
return ArrayUtils.contains(array, key);
}
答案 1 :(得分:30)
这是因为Arrays.asList(array)
返回List<int[]>
。 array
参数被视为要包装的一个值(获取整数数组的列表),而不是vararg。
请注意 使用对象类型(而不是基元):
public boolean contains(final String[] array, final String key) {
return Arrays.asList(array).contains(key);
}
甚至:
public <T> boolean contains(final T[] array, final T key) {
return Arrays.asList(array).contains(key);
}
但你不能拥有List<int>
并且自动装箱在这里不起作用。
答案 2 :(得分:20)
这是Java 8解决方案
public static boolean contains(final int[] arr, final int key) {
return Arrays.stream(arr).anyMatch(i -> i == key);
}
答案 3 :(得分:17)
Guava为原始类型提供了其他方法。其中包含一个包含与你相同的参数的方法。
public boolean contains(final int[] array, final int key) {
return Ints.contains(array, key);
}
您可以静态导入番石榴版本。
答案 4 :(得分:15)
另一种方式:
public boolean contains(final int[] array, final int key) {
Arrays.sort(array);
return Arrays.binarySearch(array, key) >= 0;
}
这会修改传入的数组。您可以选择复制数组并处理原始数组,即int[] sorted = array.clone();
但这只是短代码的一个例子。运行时为O(NlogN)
,而您的方式为O(N)
答案 5 :(得分:14)
我知道这已经太晚了,但请尝试Integer[]
而不是int[]
。
答案 6 :(得分:1)
1.one-off使用
List<T> list=Arrays.asList(...)
list.contains(...)
2.如果您使用多次,请使用HashSet进行性能考虑。
Set <T>set =new HashSet<T>(Arrays.asList(...));
set.contains(...)
答案 7 :(得分:0)
您可以使用java.util.Arrays
类通过T[?]
等方法转换List<T>
对象中的数组contains
:
Arrays.asList(int[] array).contains(int key);
答案 8 :(得分:0)
这适用于java 8
Ratings
答案 9 :(得分:0)
尝试一下:
public static void arrayContains(){
int myArray[]={2,2,5,4,8};
int length=myArray.length;
int toFind = 5;
boolean found = false;
for(int i = 0; i < length; i++) {
if(myArray[i]==toFind) {
found=true;
}
}
System.out.println(myArray.length);
System.out.println(found);
}
答案 10 :(得分:0)
您可以使用以下Java 8代码将原始int数组转换为Integer的数组列表,
List<Integer> arrayElementsList = Arrays.stream(yourArray).boxed().collect(Collectors.toList());
然后使用contains()
方法检查列表是否包含特定元素,
boolean containsElement = arrayElementsList.contains(key);
答案 11 :(得分:0)
private static void solutions() {
int[] A = { 1, 5, 10, 20, 40, 80 };
int[] B = { 6, 7, 20, 80, 100 };
int[] C = { 3, 4, 15, 20, 30, 70, 80, 120 };
List<Integer> aList = Arrays.stream(A).boxed().collect(Collectors.toList());
List<Integer> cList = Arrays.stream(C).boxed().collect(Collectors.toList());
String s = "";
for (Integer a : C) {
if (aList.contains(a) && cList.contains(a)) {
s = s.concat(String.valueOf(a)).concat("->");
}
}
}
答案 12 :(得分:-1)
根据int数组的大小,如果你使用集合和.contains
而不是一次遍历数组一个元素,你将获得更好的性能:
import static org.junit.Assert.assertTrue;
import java.util.HashSet;
import org.junit.Before;
import org.junit.Test;
public class IntLookupTest {
int numberOfInts = 500000;
int toFind = 200000;
int[] array;
HashSet<Integer> intSet;
@Before
public void initializeArrayAndSet() {
array = new int[numberOfInts];
intSet = new HashSet<Integer>();
for(int i = 0; i < numberOfInts; i++) {
array[i] = i;
intSet.add(i);
}
}
@Test
public void lookupUsingCollections() {
assertTrue(intSet.contains(toFind));
}
@Test
public void iterateArray() {
assertTrue(contains(array, toFind));
}
public boolean contains(final int[] array, final int key) {
for (final int i : array) {
if (i == key) {
return true;
}
}
return false;
}
}
答案 13 :(得分:-1)
解决方案#1
由于原始问题只需要一个简化的解决方案(而不是更快的解决方案),所以这是一个单行解决方案:
public boolean contains(int[] array, int key) {
return Arrays.toString(array).matches(".*[\\[ ]" + key + "[\\],].*");
}
说明: Arrays.toString()
的Javadoc表示结果用方括号括起来,相邻的元素用字符&#34;,&#34;分隔。 (逗号后跟空格)。所以我们可以指望这一点。首先我们将array
转换为字符串,然后检查此字符串中是否包含key
。当然我们不能接受&#34;子数字&#34; (例如&#34; 1234&#34;包含&#34; 23&#34;),所以我们必须寻找key
前面有一个开括号或空格的模式,然后关闭括号或逗号。
注意:使用的正则表达式模式也正确处理负数(其字符串表示以减号开头)。
解决方案#2
此解决方案已发布,但包含错误,因此我发布了正确的解决方案:
public boolean contains(int[] array, int key) {
Arrays.sort(array);
return Arrays.binarySearch(array, key) >= 0;
}
此解决方案也有副作用:它修改array
(对其进行排序)。
答案 14 :(得分:-4)
尝试Integer.parseInt()
这样做.....
public boolean chkInt(final int[] array){
int key = false;
for (Integer i : array){
try{
Integer.parseInt(i);
key = true;
return key;
}catch(NumberFormatException ex){
key = false;
return key;
}
}
}