JavaRush /Blog Java /Random-PL /Przerwa kawowa #116. Jak używać wskaźników funkcji w Javi...

Przerwa kawowa #116. Jak używać wskaźników funkcji w Javie. IndexOf w Javie — Jak znaleźć indeks ciągu w Javie

Opublikowano w grupie Random-PL

Jak używać wskaźników funkcji w Javie

Źródło: Dev.to Wskaźniki to obiekty przechowujące adres pamięci i mogące oszczędzać pamięć poprzez bezpośrednie wskazanie obiektu docelowego, tablicy lub adresu zmiennej zamiast przekazywania wartości. Niestety, w Javie nie ma „prawdziwej” koncepcji wskaźników. Ale na szczęście dla nas istnieje obejście wykorzystujące odniesienia do metod, które jest zbliżone do rzeczywistego. Przerwa kawowa #116.  Jak używać wskaźników funkcji w Javie.  IndexOf w Javie — Jak znaleźć indeks ciągu w Javie — 1

Wskaźniki funkcji

Wskaźnik funkcji to wskaźnik wskazujący adres funkcji. Niektóre przypadki użycia obejmują utworzenie procedury wywołania zwrotnego poprzez utworzenie funkcji, która wywołuje inną funkcję w oparciu o jej wykonanie, lub przechowywanie tablicy wskaźników funkcji dla dynamicznie wywoływanych metod (na przykład przechowywanie instrukcji procesora dla emulatora).

Symulacja wskaźnika funkcji

Istnieją cztery typy odwołań do metod . Używamy typu, który odwołuje się do metody instancji konkretnego obiektu. Zacznijmy od zdefiniowania interfejsu, który definiuje sygnatury metod, na które wskazujesz.
// Wrapping interface
private interface FunctionPointer {
  // Method signatures of pointed method
  void methodSignature(int a);
}
Następnie utworzymy metody z sygnaturą metody docelowej.
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);
}
Następnym krokiem jest utworzenie zmiennych interfejsu opakowania i przypisanie do nich metod. Zmienne będą działać jako wskaźnik do funkcji, która ma być przechowywana lub wykonywana.
// 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);
Wywołana metoda 1 z liczbą całkowitą 3 Wywołana metoda 2 z liczbą całkowitą 2 Wywołana metoda 3 z liczbą całkowitą 5

Korzystanie z wyrażeń lambda

Odniesienia do metod można przypisywać za pomocą wyrażeń 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);

Tablica wskaźników funkcji

Funkcjonalność tablicy odwołań do metod można emulować, tworząc tablicę interfejsu opakowania.
// 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);

Wskaźnik funkcji a wywołanie bezpośrednie

Jeśli porównasz obie opcje, bezpośrednie wywołanie metody jest prawie 5 razy szybsze niż użycie odwołania do metody. Wszystko to wynika z dodatkowego kroku wywołania wyrażenia lambda w porównaniu z metodą przechowywaną. Ale prawdopodobnie nie zauważysz żadnej utraty wydajności w ciągu roku, więc nie martw się tym.

Wniosek

Wskaźniki to zmienne wskazujące bezpośrednio adres obiektu, a nie wartość. Wskaźnik funkcji wskazuje bezpośrednio adres funkcji, co może zmniejszyć zużycie pamięci. Java nie ma wskaźników, ale może emulować zachowanie za pomocą odwołań do metod lub wyrażeń lambda. Użycie odwołania do metody jest wolniejsze niż bezpośrednie wywołanie metody, ale nie przeszkadza to w jego użyciu.

IndexOf w Javie — Jak znaleźć indeks ciągu w Javie

Źródło: FreeCodeCamp Ciąg to zbiór znaków ujętych w podwójny cudzysłów. Metoda IndexOf zwraca pozycję indeksu określonego znaku lub podciągu w ciągu. W tym artykule poznamy składnię różnych metod IndexOf . Przyjrzymy się także przykładom, które pomogą Ci zrozumieć i efektywnie wykorzystać wyszukiwanie indeksu znaku lub podciągu w kodzie Java. Przerwa kawowa #116.  Jak używać wskaźników funkcji w Javie.  IndexOf w Javie — Jak znaleźć indeks ciągu w Javie — 2

Składnia metody IndexOf

Metoda IndexOf posiada następujące metody:
public int indexOf(int char)
public int indexOf(int char, int fromIndex)
public int indexOf(String str)
public int indexOf(String str, int fromIndex)
Wyjaśnijmy te parametry:
  • char reprezentuje jeden znak w linii.
  • fromIndex określa pozycję, od której powinno rozpocząć się wyszukiwanie indeksu znaku lub podciągu. Jest to ważne, gdy masz dwa znaki/ciągi znaków, które mają tę samą wartość w ciągu. Za pomocą tego parametru możesz powiedzieć metodzie IndexOf , od czego zacząć.
  • str reprezentuje podciąg w ciągu.
Nie martw się, jeśli jeszcze nie rozumiesz, jak to wszystko działa – przykłady wszystko wyjaśnią!

Jak używać metody IndexOf w Javie

W pierwszym przykładzie znajdziemy indeks jednego znaku w ciągu. Pomoże nam to zrozumieć metodę public int IndexOf(int char) .

Przykład metody IndexOf(int Char).

public class Main {
  public static void main(String[] args) {
    String greetings = "Hello World";

    System.out.println(greetings.indexOf("o"));

    // 4
  }
}
W powyższym kodzie otrzymaliśmy zwrócony nam indeks znaku „o”, czyli 4. Mamy dwa znaki „o”, ale zwrócony został tylko indeks pierwszego. W poniższym przykładzie zobaczymy, jak możemy zwrócić indeks drugiego „o”. Jeśli zastanawiasz się, w jaki sposób uzyskuje się numery kolejne, zauważysz, że pierwszy znak w ciągu ma indeks równy zero, drugi znak ma indeks równy jeden i tak dalej.

Przykład metody IndexOf(int Char, Int fromIndex).

Oto przykład wyjaśniający metodę int indeksOf(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
  }
}
W powyższym przykładzie mówimy metodzie IndexOf , aby rozpoczęła pracę od piątego indeksu. H => indeks 0 e => indeks 1 l => indeks 2 l => indeks 3 0 => indeks 4 Należy pamiętać, że indeks 5 nie jest znakiem „W”. Piąty indeks to spacja pomiędzy „Hello” i „World”. Zatem w tym kodzie wszystkie inne znaki poprzedzające piąty indeks będą ignorowane. 7 jest zwracane jako indeks drugiego znaku „o”.

Przykład metody Int indeksOf(String Str).

W poniższym przykładzie zrozumiemy, jak działa publiczna metoda int indeksOf(String str) , która zwraca indeks podłańcucha.
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
  }
}
Zastanawiam się, jak odzyskaliśmy 11? Powinieneś przejrzeć ostatnią sekcję, aby zrozumieć, w jaki sposób zliczane są indeksy i w jaki sposób spacje między podciągami są również uważane za indeksy. Należy pamiętać, że gdy podciąg jest przekazywany jako parametr, zwracanym indeksem jest indeks pierwszego znaku w podciągu. 11 to indeks znaku „b”.

Przykład metody IndexOf(String Str, Int fromIndex).

Ostatnią metodą jest public int indeksOf(String str, int fromIndex) - taka sama jak publiczna metoda int indeksOf(int char, int fromIndex) . Zwraca indeks z określonej pozycji.
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
  }
}
W tym przykładzie określiliśmy, że metoda powinna rozpoczynać pracę od piątego indeksu, który następuje po pierwszym podciągu for. 21 jest indeksem drugiego podciągu for. Na koniec, gdy przekażemy znak lub podciąg, którego nie ma w ciągu, metoda IndexOf zwróci -1. Oto przykład:
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
  }
}

Wniosek

W tym artykule nauczyliśmy się, jak korzystać z czterech metod IndexOf , podając jasne przykłady. Zobaczyliśmy także, jak wygląda składnia każdej z tych metod i w jaki sposób każą indeksowi wrócić. Ponadto udało nam się dowiedzieć, co się stanie, gdy jako parametr zostanie przekazany nieistniejący znak lub podciąg.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION