Bagaimana saya dapat menemukan indeks nilai tertentu di Java array dari tipe int
?
Saya mencoba menggunakan Array.binarySearch
pada array disortir, itu hanya kadang-kadang memberikan jawaban yang benar.
Integer[] array = {1,2,3,4,5,6};
Arrays.asList(array).indexOf(4);
Perhatikan bahwa solusi ini threadsafe karena itu menciptakan objek baru dari Daftar jenis
Juga anda don't ingin memohon ini dalam satu lingkaran atau sesuatu seperti itu karena anda akan menciptakan objek baru setiap waktu
Pilihan lain jika anda menggunakan Jambu Koleksi Int.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);
Ini adalah pilihan yang tepat ketika ruang, waktu dan penggunaan kembali kode adalah pada premium. Hal ini juga sangat singkat.
Lihat di API dan mengatakan anda harus mengurutkan array pertama
Jadi:
Arrays.sort(array);
Arrays.binarySearch(array, value);
Jika anda don't ingin mengurutkan array:
public int find(double[] array, double value) {
for(int i=0; i<array.length; i++)
if(array[i] == value)
return i;
}
Salin metode ini ke dalam kelas anda
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;
}
Memanggil metode ini dengan melewati dua perameters Array dan nilai dan toko nya kembali nilai dalam sebuah variabel integer.
int indexNum = getArrayIndex(array,value);
Terima kasih
Anda perlu memilah nilai-nilai sebelum menggunakan pencarian biner. Jika tidak, cara manual adalah untuk mencoba semua ints di tab anda.
public int getIndexOf( int toSearch, int[] tab )
{
for( int i=0; i< tab.length ; i ++ )
if( tab[ i ] == toSearch)
return i;
return -1;
}//met
Metode alternatif yang bisa memetakan semua indeks untuk masing-masing nilai dalam peta<Integer, Integer>.
tab[ index ] = value;
if( map.get( value) == null || map.get( value) > index )
map.put( value, index );
dan kemudian peta.mendapatkan nilai(value) untuk mendapatkan indeks.
Salam, Stéphane
@pst, terima kasih untuk komentar anda. Yang dapat anda posting lain alternatif metode ?
Anda bisa mengubahnya ke daftar, kemudian gunakan indexOf metode:
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(jawa.lang.Obyek)
Dalam kasus ada yang masih mencari jawaban-
Anda dapat menggunakan ArrayUtils.indexOf() dari Apache Commons Perpustakaan.
Jika anda menggunakan Java 8 anda juga dapat menggunakan Strean API:
public static int indexOf(int[] array, int valueToFind) { if (array == null) { return -1; } kembali IntStream.range(0, array.panjang) .filter(i -> valueToFind == array[i]) .findFirst() .orElse(-1); }
static int[] getIndex(int[] data, int number) {
int[] positions = new int[data.length];
if (data.length > 0) {
int counter = 0;
for(int i =0; i < data.length; i++) {
if(data[i] == number){
positions[counter] = i;
counter++;
}
}
}
return positions;
}
Pencarian biner: pencarian Biner juga dapat digunakan untuk mencari indeks dari elemen array dalam array. Tapi binary search hanya dapat digunakan jika array tersebut diurutkan. Java menyediakan kita dengan built-in function yang dapat ditemukan dalam Array perpustakaan dari Java yang akan rreturn indeks jika elemen hadir, yang lain itu mengembalikan -1. Kompleksitas akan menjadi O(log n). Di bawah ini adalah implementasi dari pencarian Biner.
public static int findIndex(int arr[], int t) {
int index = Arrays.binarySearch(arr, t);
return (index < 0) ? -1 : index;
}
Anda dapat melakukannya seperti ini:
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;
}
}
Ditambahkan XOR :)
/**
* 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;
}
Dalam metode utama menggunakan for loop: -ketiga untuk loop dalam contoh saya adalah jawaban untuk pertanyaan ini. -dalam contoh, saya membuat sebuah array dari 20 bilangan bulat acak, ditugaskan variabel jumlah terkecil, dan berhenti loop ketika lokasi hotel yang mencapai nilai terkecil saat menghitung jumlah loop.
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);
}
}
Kode output semua angka-angka dan lokasi mereka, dan lokasi dari nomor terkecil diikuti dengan nomor terkecil.