java数组查找
‘壹’ java数组查找最小不存在自然数
用排序呗,给你一个例子
public vodi fun(){
int[] a ={-1,3,2,1,5,4,9,10};
java.util.Arrays.sort(a); //利用这个包来对数组排序,默认为升序
int count = 0;
while(count<a.length){ //这个循环是为了找出数组中的非零元素
if(a[count]>0){ //在这个例子中第一个书a[0]=-1,if语句判断为假,然后继续执行
break; // count++,知道第二个数a[1]=1,执行bereak;输出a[count]
}
count++;
}
System.out.println(a[count]);
}
‘贰’ java中如何查找数组中某个元素
public static void main(String[] args) {
//定义并初始化数组
int[] arr = {22,33,44,55,66,7,2,5,24};
//定义并初始化Scanner对象,用于获取输入键盘输入的内容
Scanner scanner = new Scanner(System.in);
//输出信息
System.out.print("请输入需要查找的数字:");
//获取键盘输入要查找的数字
int target = scanner.nextInt();
//循环数组
for(int i = 0; i < arr.length; i++) {
//如果输入的数字跟当前数组的元素的值相同
if(target == arr[i]) {
//输入所在位置,从1开始
System.out.println(target + "位于数字的第" + (i + 1) + "位");
//结束
return;
}
}
//如果找不到的话就提示一下
System.out.println("数组中不存在数字:" + target);
}
‘叁’ 在Java中,如何检测一个数组中是否包含某一个数据
在Java中,检测一个数组是否包含某一个数据,通常有四种方法:
(1)for循环
(2)转换为List,调用Arrays.asList(arr).contains方法
(3)使用Set
(4)使用Arrays.binarySearch()方法
下面为上述四种方法的具体代码实现:
1、使用for循环
public static boolean useLoop(String[] arr, String targetValue) {
for (String s : arr) {
if (s.equals(targetValue))
return true;
}
return false;
}
‘肆’ java怎么 在数组 查找元素
1
遍历数组判断
2
从开始就把数组的内容按照你要查找的那个条件的顺序排列存储,然后
二分法查找
。Arrays类有相关实现,可以参考。或者可以直接用,但是注意使用条件,很重要。
‘伍’ java中怎么实现查找某个数组里的string值
如何检查一个未排序的数组中是否包含某个特定值,这是一个在Java中非常实用并且频繁使用的操作。另外,这也是Stack
Overflow上面非常受关注的问题。在得票数最多的答案中,可以看到,检查数组中是否包含特定值可以用多种不同的方式实现,但是时间复杂度差别很大。
下面,我将为大家展示各种方法及其需要花费的时间。
1.检查数组中是否包含特定值的四种不同方法
1)使用List:
public static boolean useList(String[] arr, String targetValue) {
return Arrays.asList(arr).contains(targetValue);
}
2)使用Set:
public static boolean useSet(String[] arr, String targetValue) {
Set<String> set = new HashSet<String>(Arrays.asList(arr));
return set.contains(targetValue);
}
3)使用一个简单循环:
public static boolean useLoop(String[] arr, String targetValue) {
for(String s: arr){
if(s.equals(targetValue))
return true;
}
return false;
}
4)使用Arrays.binarySearch():
注:下面的代码是错误的,这样写出来仅仅为了理解方便。binarySearch()只能用于已排好序的数组中。所以,你会发现下面结果很奇怪。
public static boolean useArraysBinarySearch(String[] arr, String targetValue) {
int a = Arrays.binarySearch(arr, targetValue);
if(a > 0)
return true;
else
return false;
}
2.时间复杂度
通过下面的这段代码可以近似比较几个方法的时间复杂度。虽然分别搜索一个大小为5、1K、10K的数组是不够精确的,但是思路是清晰的。
public static void main(String[] args) {
String[] arr = new String[] { "CD", "BC", "EF", "DE", "AB"};
//use list
long startTime = System.nanoTime();
for (int i = 0; i < 100000; i++) {
useList(arr, "A");
}
long endTime = System.nanoTime();
long ration = endTime - startTime;
System.out.println("useList: " + ration / 1000000);
//use set
startTime = System.nanoTime();
for (int i = 0; i < 100000; i++) {
useSet(arr, "A");
}
endTime = System.nanoTime();
ration = endTime - startTime;
System.out.println("useSet: " + ration / 1000000);
//use loop
startTime = System.nanoTime();
for (int i = 0; i < 100000; i++) {
useLoop(arr, "A");
}
endTime = System.nanoTime();
ration = endTime - startTime;
System.out.println("useLoop: " + ration / 1000000);
//use Arrays.binarySearch()
startTime = System.nanoTime();
for (int i = 0; i < 100000; i++) {
useArraysBinarySearch(arr, "A");
}
endTime = System.nanoTime();
ration = endTime - startTime;
System.out.println("useArrayBinary: " + ration / 1000000);
}
结果:
useList: 13
useSet: 72
useLoop: 5
useArraysBinarySearch: 9
对于长度为1K的数组:
String[] arr = new String[1000];
Random s = new Random();
for(int i=0; i< 1000; i++){
arr[i] = String.valueOf(s.nextInt());
}
结果:
1
2
3
4
useList: 112
useSet: 2055
useLoop: 99
useArrayBinary: 12
对于长度为10K的数组:
String[] arr = new String[10000];
Random s = new Random();
for(int i=0; i< 10000; i++){
arr[i] = String.valueOf(s.nextInt());
}
结果:
useList: 1590
useSet: 23819
useLoop: 1526
useArrayBinary: 12
很明显,使用简单循环的方法比使用其他任何集合效率更高。许多开发者会使用第一种方法,但是它并不是高效的。将数组压入Collection类型中,需要首先将数组元素遍历一遍,然后再使用集合类做其他操作。
如果使用Arrays.binarySearch()方法,数组必须是已排序的。由于上面的数组并没有进行排序,所以该方法不可使用。
实际上,如果你需要借助数组或者集合类高效地检查数组中是否包含特定值,一个已排序的列表或树可以做到时间复杂度为O(log(n)),hashset可以达到O(1)。
‘陆’ java在数组里查找数据
在你查找的输入数字那段程序中,你看下,直接就是查找到一个然后程序就跳出来了,此时最好的方法是在程序前面定义一个数组,因为你不确定有多少个你要查找的数,该数组用来存储对应查找的数位置,
你再查询那段程序改下,让其不要查找到一个就跳出,而是用一直查找到数组最后,程序我不给你写了,你先自己试试看看,不行的话,再帮你,毕竟自己实践是最好的!
‘柒’ Java数组中查找
binarySearch
public static int binarySearch(Object[] a,
Object key)使用二分搜索法来搜索指定数组,以获得指定对象。在进行此调用之前,必须根据元素的自然顺序对数组进行升序排序(通过 sort(Object[]) 方法)。如果没有对数组进行排序,则结果是不确定的。(如果数组包含不可相互比较的元素(例如,字符串和整数),则无法 根据其元素的自然顺序对数组进行排序,因此结果是不确定的。)如果数组包含多个等于指定对象的元素,则无法保证找到的是哪一个。
参数:
a - 要搜索的数组
key - 要搜索的值
返回:
如果它包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。插入点 被定义为将键插入数组的那一点:即第一个大于此键的元素索引,如果数组中的所有元素都小于指定的键,则为 a.length。注意,这保证了当且仅当此键被找到时,返回的值将 >= 0。
抛出:
ClassCastException - 如果搜索的键不能与数组的元素进行比较。
‘捌’ Java怎么在数组中查找互不相同数字的数量
思路1:把两个list集合合并成一个list集合,对合成后的list集合做排序,比较合并后list第i个和第i+1值是否,相同则输出该值。
思路2:arrays.sort对其中一个数组进行排序,利用arrays.binarysearch方法在已排序数组中逐个检索另一个数组的值。
‘玖’ java怎么查找数组的所有方法
不知道你实际是不是指ArrayList这个类,下面打印ArrayList类的所有方法
Method[]methods=ArrayList.class.getMethods();
for(inti=0;i<methods.length;i++){
System.out.print(methods[i].getReturnType());
System.out.print("");
System.out.print(methods[i].getName());
System.out.print("(");
Class<?>[]parameterTypes=methods[i].getParameterTypes();
for(intj=0;j<parameterTypes.length;j++){
System.out.print(parameterTypes[j].getName());
if(j<parameterTypes.length-1){
System.out.print(",");
}
}
System.out.println(")");
}
[Ljava.lang.Object; [L标示数组