如何find一个int数组中的元素的索引?
如何在int
types的Java数组中find某个值的索引?
我尝试使用Arrays.binarySearch
对我的未sorting的数组,它只有时会给出正确的答案。
Integer[] array = {1,2,3,4,5,6}; Arrays.asList(array).indexOf(4);
请注意,此解决scheme是线程安全的,因为它创build了一个Listtypes的新对象。
你也不想在循环或类似的东西中调用它,因为你每次都会创build一个新的对象
如果您使用番石榴集合另一种select是Ints.indexOf
// Perfect storm: final int needle = 42; final int[] haystack = [1, 2, 3, 42]; // Spoiler alert: index == 3 final int index = Ints.indexOf(haystack, needle);
当空间,时间和代码重用非常重要时,这是一个很好的select。 这也是非常简洁的。
看看API ,它说你必须先sorting数组
所以:
Arrays.sort(array); Arrays.binarySearch(array, value);
如果你不想sorting数组:
public int find(double[] array, double value) { for(int i=0; i<array.length; i++) if(array[i] == value) return i; }
将此方法复制到您的class级中
public int getArrayIndex(int[] arr,int value) { int k=0; for(int i=0;i<arr.length;i++){ if(arr[i]==value){ k=i; break; } } return k; }
调用此方法传递两个参数数组和值,并将其返回值存储在一个整型variables中。
int indexNum = getArrayIndex(array,value);
谢谢
您需要在使用二分查找之前对值进行sorting。 否则,手动方式是尝试所有的标签中的整数。
public int getIndexOf( int toSearch, int[] tab ) { for( int i=0; i< tab.length ; i ++ ) if( tab[ i ] == toSearch) return i; return -1; }//met
另一种方法是映射地图中每个值的所有索引。
tab[ index ] = value; if( map.get( value) == null || map.get( value) > index ) map.put( value, index );
然后map.get(value)来获取索引。
问候,Stéphane
@pst,感谢您的评论。 你可以发表其他方法吗?
你可以把它转换成一个列表,然后使用indexOf方法:
Array.asList(array).indexOf(1);
http://download.oracle.com/javase/1.5.0/docs/api/java/util/Arrays.html#asList(T …) http://download.oracle.com/javase/1.5.0 /docs/api/java/util/List.html#indexOf(java.lang.Object )
简单:
public int getArrayIndex(int[] arr,int value) { for(int i=0;i<arr.length;i++) if(arr[i]==value) return i; return -1; }
您可以遍历数组,直到find要查找的索引,或者使用List
。 请注意,您可以使用asList()
将数组转换为列表。
/** * Method to get the index of the given item from the list * @param stringArray * @param name * @return index of the item if item exists else return -1 */ public static int getIndexOfItemInArray(String[] stringArray, String name) { if (stringArray != null && stringArray.length > 0) { ArrayList<String> list = new ArrayList<String>(Arrays.asList(stringArray)); int index = list.indexOf(name); list.clear(); return index; } return -1; }
你可以这样做:
public class Test { public static int Tab[] = {33,44,55,66,7,88,44,11,23,45,32,12,95}; public static int search = 23; public static void main(String[] args) { long stop = 0; long time = 0; long start = 0; start = System.nanoTime(); int index = getIndexOf(search,Tab); stop = System.nanoTime(); time = stop - start; System.out.println("equal to took in nano seconds ="+time); System.out.println("Index of searched value is: "+index); System.out.println("De value of Tab with searched index is: "+Tab[index]); System.out.println("=========================================================="); start = System.nanoTime(); int Bindex = bitSearch(search,Tab); stop = System.nanoTime(); time = stop - start; System.out.println("Binary search took nano seconds ="+time); System.out.println("Index of searched value is: "+Bindex); System.out.println("De value of Tab with searched index is: "+Tab[Bindex]); } public static int getIndexOf( int toSearch, int[] tab ){ int i = 0; while(!(tab[i] == toSearch) ) { i++; } return i; // or return tab[i]; } public static int bitSearch(int toSearch, int[] tab){ int i = 0; for(;(toSearch^tab[i])!=0;i++){ } return i; }
}
添加了XOR 🙂
在使用for循环的主要方法中:在我的例子中,循环的第三个是这个问题的答案。 – 在我的例子中,我做了一个20个随机整数的数组,赋予一个variables最小的数字,当数组的位置达到最小值时,停止循环,同时计算循环次数。
import java.util.Random; public class scratch { public static void main(String[] args){ Random rnd = new Random(); int randomIntegers[] = new int[20]; double smallest = randomIntegers[0]; int location = 0; for(int i = 0; i < randomIntegers.length; i++){ // fills array with random integers randomIntegers[i] = rnd.nextInt(99) + 1; System.out.println(" --" + i + "-- " + randomIntegers[i]); } for (int i = 0; i < randomIntegers.length; i++){ // get the location of smallest number in the array if(randomIntegers[i] < smallest){ smallest = randomIntegers[i]; } } for (int i = 0; i < randomIntegers.length; i++){ if(randomIntegers[i] == smallest){ //break the loop when array location value == <smallest> break; } location ++; } System.out.println("location: " + location + "\nsmallest: " + smallest); } }
代码输出所有的数字和它们的位置,以及最小数字后跟最小数字的位置。