JavaRush /Blog Java /Random-PL /Przerwa kawowa #167. Rzeczy do przejrzenia przed rozmową ...

Przerwa kawowa #167. Rzeczy do przejrzenia przed rozmową kwalifikacyjną w języku Java. Jaka jest różnica między wyliczeniem a iteratorem w Javie?

Opublikowano w grupie Random-PL

Rzeczy do przejrzenia przed rozmową kwalifikacyjną w języku Java

Źródło: Medium W tym artykule znajdziesz 17 wskazówek od doświadczonego programisty, które pomogą Ci w rozmowie kwalifikacyjnej w języku Java. Przerwa kawowa #167.  Rzeczy do przejrzenia przed rozmową kwalifikacyjną w języku Java.  Jaka jest różnica między wyliczeniem a iteratorem w Javie?  - 1Pracuję w branży IT od ponad 20 lat i większość tego czasu spędziłem pracując z Javą. Ponadto zdobyłem duże doświadczenie w rozmowach kwalifikacyjnych z programistami Java. Chociaż język Java stale się rozwija, podstawowe koncepcje pozostają w dużej mierze takie same. Oto kilka wskazówek, którymi chcę się podzielić z początkującymi programistami, zanim pójdą na rozmowę kwalifikacyjną. Jeśli je powtórzysz, uchroni Cię to przed poważnymi błędami.
  1. Klasa Object znajduje się w katalogu głównym hierarchii klas Java. Wszystkie klasy Java wywodzą się z Object . Nawet jeśli klasa nie rozszerza jawnie żadnej klasy, rozszerza Object . Jednak klasa może jawnie rozszerzać Object .

  2. W Javie można rozszerzyć tylko jedną klasę (wielokrotne dziedziczenie nie jest dozwolone ze względu na niejednoznaczność). Jednak klasa może implementować dowolną liczbę interfejsów jednocześnie.

  3. Interfejs rozszerza inny interfejs (w przeciwieństwie do implementacji).

  4. W Javie istnieją cztery modyfikatory dostępu: publiczny (dostępny dla wszystkich), chroniony (dostępny tylko dla podklas), prywatny (dostępny tylko w ramach jednej klasy), domyślny (dostępny w ramach jednego pakietu). Należy zauważyć, że podklasy tej samej klasy mogą znajdować się w różnych pakietach. Klasa nadrzędna i podklasy nie muszą być częścią tego samego pakietu.

  5. Ciąg klasy jest niezmienny. Niezmienność oznacza, że ​​sama klasa String nie udostępnia żadnych metod zastępowania wartości w odwołaniu typu String . Jeśli chcesz zastąpić wartość odwołania w postaci ciągu znaków, musisz jawnie przypisać wartość za pomocą operatora = . Porównaj to z klasami StringBuffer lub StringBuilder , które mają metody takie jak append, więc nie musisz używać tam operatora = .

  6. ConcurrentHashMap jest bardziej wydajny niż Hashtable . ConcurrentHashMap działa na segmentach podstawowej struktury danych, w której operacja zapisu blokuje tylko określony segment (niezależnie od tego, do którego segmentu należy klucz). Jednak w Hashtable cała struktura danych zostanie zablokowana.

  7. ConcurrentHashMap jest wolniejszy niż HashMap , ponieważ HashMap nie implementuje bezpieczeństwa wątków. HashMap może zgłosić wyjątek ConcurrentModificationException , jeśli wątek wykonuje iterację po HashMap , a inny wątek próbuje zmodyfikować tę samą HashMap . ConcurrentHashMap nie zgłosi tutaj wyjątku.

  8. Jak zaimplementować równość dwóch obiektów tej samej klasy, którą zdefiniowałeś? Odpowiedź: Można to zrobić, zastępując metodę hashcode() .

  9. Jaki jest domyślny wynik metody toString() ? Odpowiedź: Jest to połączenie nazwy klasy, znaku @ i wartości hashcode() .

  10. Jak zaimplementować polimorfizm w Javie? Jednym ze sposobów osiągnięcia tego jest przeciążenie metody. Innym sposobem jest zastąpienie metody.

  11. Jak wywołać konstruktor nadklasy z klasy podrzędnej? Odpowiedź: Można to zrobić za pomocą słowa kluczowego super() . Metoda super() bez argumentów jest zawsze wywoływana, nawet jeśli nie jest to wyraźnie określone. Należy jawnie określić metodę super() z argumentem. Wywołanie super() (z argumentem lub bez) musi zawsze być pierwszą linią konstruktora klasy potomnej, jeśli ma zostać wywołane.

  12. Co to są wyjątki zaznaczone i niesprawdzone? Odpowiedź: Sprawdzone wyjątki to te, które muszą zostać zadeklarowane lub przechwycone w metodzie, w której mają zostać zgłoszone. Niesprawdzony wyjątek nie ma tego ograniczenia. java.io.IOException jest przykładem sprawdzonego wyjątku. Niesprawdzone wyjątki pochodzą z klasy RunTimeException .

  13. Klasą główną hierarchii wyjątków jest Throwable (co z kolei niejawnie rozszerza Object ). Wyjątek i błąd pochodzą z Throwable .

  14. Od wersji Java 8 metody mogą mieć implementację w interfejsie. Metody domyślne i metody statyczne mogą mieć implementacje.

  15. Nie można utworzyć instancji klasy kwalifikującej się jako abstrakcyjna . Każda klasa, która nie udostępnia treści żadnej z metod, musi zostać zadeklarowana jako abstrakcyjna. Programista może zadeklarować klasę jako abstrakcyjną, nawet jeśli wszystkie metody mają treść - nie jest to jednak zbyt zalecane, ponieważ w tym przypadku nie można utworzyć instancji klasy.

  16. Ostatnich zajęć nie można przedłużyć. Zmiennej końcowej nie można przypisać innej wartości. Nie można zastąpić metody końcowej .

  17. Jakie słowa kluczowe są wymagane w konstrukcji try-catch-finally ? Może to być try-catch , try-finale lub wszystkie trzy. W tym przypadku catch nie jest wymaganym słowem kluczowym.

Jaka jest różnica między wyliczeniem a iteratorem w Javie?

Źródło: Rrtutors W tym poście omówiono różnice między wyliczeniem a iteracją w Javie. Pakiet Java.util udostępnia dwa interfejsy do przeglądania elementów obiektu Collection : Enumeration i Iterator . Mimo że oba przechodzą przez obiekt Collection , istnieją między nimi pewne różnice.

Różnice między wyliczeniem a iteratorem

  • Czas dodany do JDK: Są wprowadzane w różnym czasie. Enum zostało wprowadzone w JDK 1.0, natomiast iterator został wprowadzony w JDK 1.2.

  • Usuwanie elementów: To główna różnica między nimi. W interfejsie Iteratora możemy usunąć element podczas iteracji po obiekcie Collection , natomiast nie możemy go zmienić podczas iteracji po obiekcie Collection za pomocą Enumeration . Dzieje się tak, ponieważ interfejs Iteratora ma metodę usuwania() , ale interfejs Enumeration nie.

  • Typ operacji: Iterator ma typ operacji „fail-fast”, a wyliczenie ma typ operacji „fail-safe”. W rezultacie Iterator zgłasza wyjątek ConcurrentModificationException , gdy kolekcja zostanie zmodyfikowana podczas iteracji, chyba że zostanie użyta jego własna metoda usuwania() , podczas gdy Enumeration nie zgłasza żadnego wyjątku, gdy kolekcja jest modyfikowana podczas iteracji.

Przykłady wyliczeń i iteratorów w Javie

Przykład wyliczenia

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Enumeration;

import java.util.List;

import java.util.Vector;

public class Enumeration_Example {

      public static void main(String[] args) {

                  List laptoplist = new ArrayList(Arrays.asList( new String[] {"Samsung", "Lenovo", "Apple", "HP"}));

            Vector vectali = new Vector(laptoplist);

            delete(vectali, "Samsung");

        }

        private static void delete(Vector vectali, String laptop) {

            Enumeration lapi = vectali.elements();

            while (lapi.hasMoreElements()) {

              String s = (String) lapi.nextElement();

              if (s.equals(laptop)) {

                  vectali.remove(laptop);

              }

            }

            System.out.println("The Laptop brands includes:");

            lapi = vectali.elements();

            while (lapi.hasMoreElements()) {

              System.out.println(lapi.nextElement());

            }

      }

}
Wniosek:
Marki laptopów obejmują: Lenovo Apple HP

Przykład iteratora:

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Iterator;

import java.util.List;

import java.util.Vector;

public class Iterator_example {

      public static void main(String[] args) {

                  List laptoplist = new ArrayList(Arrays.asList( new String[] {"Samsung", "Lenovo", "HP", "Apple"}));

            Vector vectali = new Vector(laptoplist);

            delete(vectali, "HP");

        }

        private static void delete(Vector vectali, String name) {

            Iterator a = vectali.iterator();

            while (a.hasNext()) {

              String s = (String) a.next();

              if (s.equals(name)) {

                  a.remove();

              }

            }

            // Display the names

            System.out.println("The laptop brand includes:");

            a = vectali.iterator();

            while (a.hasNext()) {

              System.out.println(a.next());

            }

      }

}
Wniosek:
Marka laptopów obejmuje: Samsung Lenovo Apple
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION