Bagaimana untuk menemukan indeks dari elemen dalam sebuah array int?

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.

Mengomentari pertanyaan (7)
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

Komentar (5)

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.

Komentar (0)

Lihat di [API][1] 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
Komentar (2)

Salin metode ini ke dalam kelas anda


 public int getArrayIndex(int[] arr,int value) {

        int k=0;
        for(int i=0;i
Komentar (0)

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 ?

Komentar (1)
Komentar (1)

Anda dapat menggunakan modern Jawa untuk memecahkan masalah ini. Silakan gunakan kode di bawah ini:

static int findIndexOf(int V, int[] arr) {
        return IntStream.range(1, arr.length).filter(i->arr[i]==V).findFirst().getAsInt();
    }
Komentar (0)
    Integer[] arr = { 0, 1, 1, 2, 3, 5, 8, 13, 21 };
    List arrlst = Arrays.asList(arr);
    System.out.println(arrlst.lastIndexOf(1));
Komentar (0)

Sederhana:


public int getArrayIndex(int[] arr,int value) {
    for(int i=0;i
Komentar (0)

Dalam kasus ada yang masih mencari jawaban-

  1. Anda dapat menggunakan ArrayUtils.indexOf() dari Apache Commons Perpustakaan.

  2. 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); }

Komentar (0)
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;
}
Komentar (0)

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; 
} 
Komentar (0)

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 :)

Komentar (4)
/**
     * 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 list = new ArrayList(Arrays.asList(stringArray));
            int index = list.indexOf(name);
            list.clear();
            return index;
        }
        return -1;
    }
Komentar (1)

Anda dapat berjalan melalui array sampai anda menemukan indeks anda'kembali mencari, atau menggunakan Daftar sebagai gantinya. Perhatikan bahwa anda dapat mengubah array menjadi sebuah daftar dengan sebagai daftar().

Komentar (0)

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 == 
                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.

Komentar (0)
Integer[] array = {1, 2, 3, 4, 5, 6};

for (int i = 0; i < array.length; i++) {
    if (array[i] == 4) {
        system.out.println(i);
        break;
    }
}
Komentar (1)