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.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.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.
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
}
}
GO TO FULL VERSION