int [] numbers1To9 = new int[]{1,2,3,4,5,6,7,8,9};
List<Integer> ilist = IntStream.of(numbers1To9).boxed().collect(Collectors.toList());
System.out.println("one is here, true or false?: "+ ilist.contains(1));
输出: one is here, true or false?: true 编辑 正如在下面的评论中提到的,如果您的唯一目标是检查值的存在,那么您根本不需要装箱和收集:
boolean contains1 = IntStream.of(numbers1To9).anyMatch(i -> i == 1);
System.out.println("one is here, true or false?: "+ contains1);
4条答案
按热度按时间2hh7jdfx1#
除了自己在int[]中查找数字之外,您还可以很容易地将int[]转换为列表:
输出:
one is here, true or false?: true
编辑正如在下面的评论中提到的,如果您的唯一目标是检查值的存在,那么您根本不需要装箱和收集:
9njqaruj2#
你的代码不起作用,因为
Arrays#asList
在基元类型的数组上返回List
只有一个元素是数组本身。有很多方法可以做你想做的事。一个简单的方法如下:输出:
myzjeezk3#
如果使用排序数组,或者对未排序数组的排序操作被认为是“廉价的”,则
binarySearch
可以认为是一个好的选择;它避免了创建更多的集合(例如Lists
)因为它直接与原始数组一起工作,其机制旨在找到存储所需密钥的位置(或其中一个位置)。因此,您可以识别它的存在(隐式)和索引所在的位置。您已经对数组进行了排序,因此在您的情况下不需要(这是使用此算法的一个优势);请注意,在使用未排序的数组时,调用
Arrays.sort
在binarySearch
是必须的,以避免“未定义”的结果。例如,如果您想知道
1
存在:例如,如果您也希望获得值的位置
2
:int pos = Arrays.binarySearch((numbers1To9), 10); // -(9)-1 --> pos=-10
pos = Arrays.binarySearch((numbers1To9), Integer.MAX_VALUE); // -(9)-1 --> pos=-10
int pos = Arrays.binarySearch((numbers1To9), 0); // -(0)-1 --> pos=-1
int [] numberUnsorted= new int[]{1,2,4,9,7,6,5,8,3};
int pos = Arrays.binarySearch((numberUnsorted), 3); //--> pos = -3 (FAIL)
pos = Arrays.binarySearch((numberUnsorted), 9); //--> pos = -10 (FAIL)
pos = Arrays.binarySearch((numberUnsorted), 6); //--> pos = -4 (FAIL)
oyt4ldly4#
在数组中查找数字的最佳方法取决于数组是否排序
如果对数组进行了排序,则可以在运行o(log(n))时找到数组中的num。
但是如果你的数组没有被排序,那么你需要考虑对数组进行排序,在有了一些算法之后,你可以在数组中找到你的数字。
比如二进制搜索等等。。。