JavaRush /Blog Java /Random-MS /Coffee break #116. Cara menggunakan penunjuk fungsi dalam...

Coffee break #116. Cara menggunakan penunjuk fungsi dalam Java. indexOf dalam Java - Bagaimana untuk mencari indeks rentetan di Jawa

Diterbitkan dalam kumpulan

Cara menggunakan penunjuk fungsi dalam Java

Sumber: Dev.to Pointers ialah objek yang menyimpan alamat memori dan boleh menyimpan memori dengan menunjuk terus ke objek sasaran, tatasusunan atau alamat pembolehubah dan bukannya melalui nilai. Malangnya, tiada konsep "sebenar" penunjuk di Jawa. Tetapi nasib baik bagi kami, terdapat penyelesaian menggunakan rujukan kaedah yang hampir dengan perkara sebenar. Coffee break #116.  Cara menggunakan penunjuk fungsi dalam Java.  indexOf dalam Java - Bagaimana untuk mencari indeks rentetan dalam Java - 1

Penunjuk fungsi

Penunjuk fungsi ialah penunjuk yang menunjuk ke alamat fungsi. Sesetengah kes penggunaan termasuk mencipta rutin panggil balik dengan mencipta fungsi yang memanggil fungsi lain berdasarkan pelaksanaannya, atau menyimpan tatasusunan penunjuk fungsi untuk kaedah yang dipanggil secara dinamik (contohnya, menyimpan arahan pemproses untuk emulator).

Simulasi penunjuk fungsi

Terdapat empat jenis rujukan kaedah . Kami menggunakan jenis yang merujuk kepada kaedah contoh objek tertentu. Mari mulakan dengan mentakrifkan antara muka yang mentakrifkan tandatangan kaedah yang anda tunjuk.

// Wrapping interface
private interface FunctionPointer {
  // Method signatures of pointed method
  void methodSignature(int a);
}
Kemudian kami akan membuat kaedah dengan tandatangan kaedah sasaran.

public void method1(int b) {
  System.out.println("Called method1 with integer " + b);
}

public void method2(int v) {
  System.out.println("Called method2 with integer " + v);
}

public void method3(int a) {
  System.out.println("Called method3 with integer " + a);
}
Langkah seterusnya ialah membuat pembolehubah antara muka pembalut dan menetapkan kaedah kepada mereka. Pembolehubah akan bertindak sebagai penunjuk kepada fungsi yang akan disimpan atau dilaksanakan.

// Create a variable of the interface and assign
// the method references
FunctionPointer pointer1 = this::method1;
FunctionPointer pointer2 = this::method2;

// Call both methods using their "pointer"
pointer1.methodSignature(3);
pointer2.methodSignature(2);

// Reassign and call pointer 1
pointer1 = this::method3;

pointer1.methodSignature(5);
Dipanggil method1 dengan integer 3 Dipanggil method2 dengan integer 2 Dipanggil method3 dengan integer 5

Menggunakan Ungkapan Lambda

Rujukan kaedah boleh diberikan menggunakan ungkapan lambda.

// Create a method reference and assign a methods using a lambda.
FunctionPointer pointer1 =
  (a) -> System.out.println("Called pointer1 with int " + a);

FunctionPointer pointer2 =
  (b) -> System.out.println("Called pointer2 with int " + b);

Tatasusunan penunjuk fungsi

Kefungsian tatasusunan rujukan kaedah boleh dicontohi dengan mencipta tatasusunan antara muka pembalut.

// Create an array of "pointers"
FunctionPointer[] functionPointersArray = new FunctionPointer[3];

// Assign methods
functionPointersArray[0] = this::method1;
functionPointersArray[1] = this::method2;
functionPointersArray[2] = this::method3;

// Call methods    
functionPointersArray[0].methodSignature(3);
functionPointersArray[1].methodSignature(4);
functionPointersArray[2].methodSignature(5);

Penunjuk fungsi vs panggilan langsung

Jika anda membandingkan kedua-dua pilihan, memanggil kaedah secara terus hampir 5 kali lebih pantas daripada menggunakan rujukan kaedah. Ini semua kerana langkah tambahan untuk memanggil ungkapan lambda berbanding kaedah yang disimpan. Tetapi anda mungkin tidak akan melihat sebarang kehilangan prestasi dalam setahun, jadi jangan risau.

Kesimpulan

Penunjuk ialah pembolehubah yang menunjuk terus ke alamat objek dan bukannya nilai. Penunjuk fungsi terus menunjuk ke alamat fungsi, yang boleh mengurangkan penggunaan memori. Java tidak mempunyai penunjuk, tetapi boleh meniru tingkah laku menggunakan rujukan kaedah atau ungkapan lambda. Menggunakan rujukan kaedah adalah lebih perlahan daripada memanggil kaedah secara langsung, tetapi ini tidak menghalang penggunaannya.

indexOf dalam Java - Bagaimana untuk mencari indeks rentetan di Jawa

Sumber: FreeCodeCamp Rentetan ialah set aksara yang disertakan dalam petikan berganda. Kaedah indexOf mengembalikan kedudukan indeks aksara atau subrentetan yang ditentukan dalam rentetan. Dalam artikel ini, kita akan mempelajari tentang sintaks pelbagai kaedah indexOf . Kami juga akan melihat contoh yang akan membantu anda memahami dan menggunakan carian dengan berkesan untuk indeks aksara atau subrentetan dalam kod Java. Coffee break #116.  Cara menggunakan penunjuk fungsi dalam Java.  indexOf dalam Java - Bagaimana untuk mencari indeks rentetan dalam Java - 2

Sintaks kaedah indexOf

Kaedah indexOf mempunyai kaedah berikut:

public int indexOf(int char)
public int indexOf(int char, int fromIndex)
public int indexOf(String str)
public int indexOf(String str, int fromIndex)
Mari jelaskan parameter ini:
  • char mewakili satu aksara setiap baris.
  • fromIndex menentukan kedudukan di mana carian untuk indeks aksara atau subrentetan harus bermula. Ini penting apabila anda mempunyai dua aksara/rentetan yang mempunyai nilai yang sama dalam rentetan. Dengan parameter ini, anda boleh memberitahu kaedah indexOf di mana untuk bermula.
  • str mewakili subrentetan dalam rentetan.
Jangan risau jika anda belum memahami cara semuanya berfungsi—contohnya akan menjelaskan semuanya!

Cara menggunakan kaedah indexOf di Java

Dalam contoh pertama kita akan mencari indeks satu aksara dalam rentetan. Ini akan membantu kami memahami kaedah public int indexOf(int char) .

Contoh kaedah IndexOf(int Char).


public class Main {
  public static void main(String[] args) {
    String greetings = "Hello World";
    
    System.out.println(greetings.indexOf("o"));
    
    // 4
  }
}
Dalam kod di atas, kami mendapat indeks aksara "o" dikembalikan kepada kami, iaitu 4. Kami mempunyai dua aksara "o", tetapi hanya indeks yang pertama dikembalikan. Dalam contoh berikut kita akan melihat bagaimana kita boleh mengembalikan indeks "o" kedua. Jika anda tertanya-tanya bagaimana nombor jujukan diperoleh, anda akan dapati bahawa aksara pertama dalam rentetan mempunyai indeks sifar, aksara kedua mempunyai indeks satu, dan seterusnya.

Contoh kaedah indexOf(int Char, Int fromIndex).

Berikut ialah contoh yang menerangkan kaedah int indexOf(int char, int fromIndex) :

public class Main {
  public static void main(String[] args) {
    String greetings = "Hello World";
    
    System.out.println(greetings.indexOf("o", 5));
    
    // 7
  }
}
Dalam contoh di atas, kami memberitahu kaedah indexOf untuk mula bekerja pada indeks kelima. H => indeks 0 e => indeks 1 l => indeks 2 l => indeks 3 0 => indeks 4 Perhatikan bahawa indeks 5 bukan aksara “W”. Indeks kelima ialah ruang antara "Hello" dan "World". Oleh itu, dalam kod ini, semua aksara lain sebelum indeks kelima akan diabaikan. 7 dikembalikan sebagai indeks aksara kedua "o".

Contoh kaedah Int indexOf(String Str).

Dalam contoh berikut, kami akan memahami cara kaedah public int indexOf(String str) berfungsi , yang mengembalikan indeks subrentetan.

public class Main {
  public static void main(String[] args) {
    String motivation = "Coding can be difficult but don't give up";
    
    System.out.println(motivation.indexOf("be"));
    
    // 11
  }
}
Saya tertanya-tanya bagaimana kita mendapat 11 kembali? Anda harus menyemak bahagian terakhir untuk memahami cara indeks dikira dan cara ruang antara subrentetan juga dianggap sebagai indeks. Ambil perhatian bahawa apabila subrentetan diluluskan sebagai parameter, indeks yang dikembalikan ialah indeks aksara pertama dalam subrentetan. 11 ialah indeks bagi aksara “b”.

Contoh kaedah indexOf(String Str, Int fromIndex).

Kaedah terakhir ialah public int indexOf(String str, int fromIndex) - sama seperti kaedah public int indexOf(int char, int fromIndex) . Ia mengembalikan indeks dari kedudukan yang ditentukan.

public class Main {
  public static void main(String[] args) {
    String motivation = "The for loop is used for the following";
    
    System.out.println(motivation.indexOf("for", 5));
    
    // 21
  }
}
Dalam contoh ini, kami menyatakan bahawa kaedah harus memulakan kerjanya pada indeks kelima, yang datang selepas subrentetan pertama untuk. 21 ialah indeks subrentetan kedua bagi. Akhir sekali, apabila kita lulus aksara atau subrentetan yang tiada dalam rentetan, kaedah indexOf akan mengembalikan -1. Berikut ialah contoh:

public class Main {
  public static void main(String[] args) {
    String motivation = "The for loop is used for the following";
    
    System.out.println(motivation.indexOf("code"));
    
    // -1
  }
}

Kesimpulan

Dalam artikel ini, kami mempelajari cara menggunakan empat kaedah indexOf , dengan contoh yang jelas. Kami juga melihat rupa sintaks bagi setiap kaedah ini dan cara mereka memberitahu indeks untuk kembali. Selain itu, kami dapat mengetahui perkara yang berlaku apabila aksara atau subrentetan yang tidak wujud diluluskan sebagai parameter.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION