JavaRush /Blog Jawa /Random-JV /Tingkat 26. Wangsulan pitakonan wawancara babagan topik t...
zor07
tingkat
Санкт-Петербург

Tingkat 26. Wangsulan pitakonan wawancara babagan topik tingkat. Bagean 1. Pitakonan 1-5, 10.

Diterbitake ing grup
Tingkat 26. Wangsulan pitakonan wawancara babagan topik tingkat.  Bagean 1. Pitakonan 1-5, 10. - 1Ringkesan kasebut dadi rada rumit, mula aku dibagi dadi rong bagean. Bagian kapindho ngemot jawaban kanggo pitakonan babagan kankarency lan multithreading. Pérangan pisanan ngandhut sisa. Nulis cukup angel. Aku isih ora ngerti akeh, mula kaya biasane, komentar, komentar, tambahan diwenehake)

1. Carane nggunakake antarmuka Comparable?

Antarmuka Comparablengumumake mung siji cara compareTo(Object obj), dirancang kanggo ngleksanakake urutan obyek kelas. Iku trep kanggo nggunakake nalika ngurutake dhaptar dhawuh utawa susunan obyek. Cara iki mbandhingake obyek sing diarani obj. Beda karo metode equals, sing ngasilake bener utawa salah , compareTongasilake:
  • 0 yen nilai padha;
  • Nilai negatif yen callee kurang saka parameter;
  • Positif yen callee luwih saka parameter.
Iku utamané migunani kanggo ngurutake dhaptar dhawuh ( java.util.List) lan susunan obyek. Yen dhaptar / larik ngemot unsur sing ngetrapake antarmuka iki, mula bisa diurutake kanthi otomatis kanthi java.util.Collections.sort(List)/Arrays.sort(Object[]). Konsep urutan alami digandhengake karo antarmuka Comparable, amarga nggawe urutan alami kanggo kelas apa wae sing ngetrapake antarmuka iki. Ing tembung liya, urutan (x, y) cocog karo kaleksanan kondisi x.compareTo(y) <= 0. Aturan implementasine Comparable, utawa luwih, metode kasebut, compareTo(Object)kaya ing ngisor iki (x lan y minangka conto saka kelas sing ngetrapake Comparable):
  • x.compareTo(y)ngasilake -1 utawa 1 yen x kudu sadurunge utawa sawise y, mungguh. Yen cara ngasilake 0, banjur pesenan (x, y) lan (y, x) padha karo.
  • Yen sign(a)fungsi sing ngasilake -1,0,1 kanggo a, mungguh, kurang saka 0, padha karo 0 lan luwih saka 0, banjur kesetaraan kudu wareg sign(x.compareTo(y))==-sign(y.compareTo(x)). Sing logis: yen x sadurunge y, banjur y kudu sawise x, lan kosok balene.
  • Yen x.compareTo(y) > 0lan y.compareTo(z) > 0, banjur x.compareTo(z) > 0- hubungan transitivity saka inequalities.
  • Yen x.compareTo(y) == 0, banjur sign(x.compare(z)) == sign(y.compareTo(z)), kanggo sembarang z.
  • Telpon x.compareTo(null)kudu mbuwang pengecualian NullPointerException. Iki minangka bedo karo logika implementasine equals(ayo kula ngelingake sampeyan, x.equals(null)bali palsu ).
  • Yen jinis y ora bisa dibandhingake karo x, banjur telpon x.compareTo(y)kudu mbuwang pangecualian ClassCastException.
  • (x.compareTo(y) == 0) == x.equals(y), i.e. telpon x.compareTo(y)kudu bali 0 yen lan mung yen x.equals(y)bali bener . Iki minangka aturan konsistensi lan penting banget kanggo ditimbang.
Sumber:

2. Carane nggunakake antarmuka Comparator?

Antarmuka Comparatorngumumake rong cara compare(Object obj1, Object obj2)lan equals(Object obj). Nalika nggunakake antarmuka Comparator, logika kanggo mbandhingaké pasangan obyek ora umpetaken nang kelas / obyek, nanging dipun ginakaken ing kelas kapisah. Cara kasebut compare(x,y)persis padha karo telpon x.compareTo(y). Kabeh aturan kudu ditindakake kanthi cara sing padha karo aturan kanggo ngetrapake metode compareTo(Object)antarmuka Comparable. Comparatorbisa digunakake ing ngendi wae yen perlu ngurutake. Ing kasus iki, pisanan, keluwesan sing dibutuhake katon - kemampuan kanggo ngetrapake sawetara aturan ngurutake. Lan kapindho, obyek sing diurutake bisa uga ora ngleksanakake Comparable. Yen dheweke nindakake, Comparatordheweke duwe prioritas. Antarmuka Comparatoruga nemtokake cara equals(Object), kanthi paradoks kaya sing katon. Cara iki mbandhingake conto antarmuka dhewe Comparatorlan mung kudu bali yen obyek sing dibandhingake nyedhiyakake urutan urutan sing padha. Nanging, mesthi aman kanggo ninggalake implementasi asli Object.equals(Object)utuh Sumber:

3. Metode apa sing diduweni kelas Koleksi?

public static <T> boolean addAll(Collection<? super T> c, T... elements) Cara kasebut nambahake unsur array elementsmenyang koleksi Collection<? super T> c. Unsur bisa ditemtokake kanthi individu utawa minangka array. Nalika unsur kasebut ditemtokake kanthi individu, cara iki menehi kemampuan kanggo nambah kabeh unsur menyang koleksi sing ana: Collections.addAll(flavors, "Peaches 'n Plutonium", "Rocky Racoon"); public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key) public static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c) Loro-lorone cara nggoleki dhaptar sing dilewati ing parameter kanggo obyek sing dilewati ing parameter nggunakake algoritma telusuran binar. Ngasilake indeks saka unsur yen ana unsur kuwi ing dhaftar, digunakake indeks saka unsur pisanan dhaftar luwih saka key, yen kabeh unsur kurang saka key, bali list.size(). Sadurunge nggunakake cara kasebut, dhaptar kudu diurutake. Ing kasus sing sepisanan, diurutake kanthi urutan munggah ing urutan "alami" saka unsur dhaptar (padha nalika nggunakake Collections.sort(list)). Ing kasus kapindho, dhaptar kudu diurutake kanthi urutan munggah ing urutan sing diwenehake dening komparator liwati (urutan sing padha nalika nggunakake Collections.sort(list, c)[kene "karo" minangka komparator saka paramèter metode sing diterangake]) public static <E> Collection<E> checkedCollection(Collection<E> c, Class<E> type) Preamble: mekanisme generik ing basa kasebut nyedhiyakake pamriksa jinis wektu kompilasi. Biasane iki cukup, nanging ana wektu sing ora. Contone, kita nransfer koleksi kita menyang kode perpustakaan, nang endi wae ora dingerteni kanggo kita, lan kita pancene pengin kode iki "perpustakaan pihak katelu" ora nglebokake unsur saka jinis salah menyang koleksi kita. Iki kemungkinan masalah nomer 1. Kemungkinan masalah nomer 2 yaiku ing ngisor iki. Ayo program kita menehi pesen ClassCastException sing ngandhani yen ana unsur sing salah dilebokake ing koleksi kasebut. Sayange, istiméwa iki bisa dibuwang sawayah-wayah sawise unsur salah wis dilebokake, lan biasane menehi informasi sethitik utawa ora bab sumber masalah. Nggunakake metode metode checkedCollectionkita bisa nylametake awake dhewe saka masalah siji lan loro, amarga cara iki nggawe koleksi sing bisa diverifikasi nalika runtime. Ngatasi masalah nomer loro nggunakake cara iki: Contone, kita duwe iki, lan tiba metu ClassCastException.
Collection<String> c = new HashSet<String>();
Kode ing ndhuwur bisa diganti sementara karo:
Collection<String> c = Collections.checkedCollection(
         new HashSet<String>(), String.class);
Nalika kita mbukak program maneh, kita localize baris kode sing nglebokake unsur saka jinis salah menyang koleksi kita. Cara sing gegandhengan miturut pendapatku: public static <E> List<E> checkedList(List<E> list,Class<E> type) public static <K,V> Map<K,V> checkedMap(Map<K,V> m, Class<K> keyType,Class<V> valueType) public static <E> Set<E> checkedSet(Set<E> s,Class<E> type) public static <K,V> SortedMap<K,V> checkedSortedMap(SortedMap<K,V> m,Class<K> keyType,Class<V> valueType) public static <E> SortedSet<E> checkedSortedSet(SortedSet<E> s,Class<E> type) public static <T> void copy(List<? super T> dest,List<? extends T> src) Cara nyalin unsur src menyang dest. indeks saka unsur disalin bakal padha. public static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll) public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll) public static <T> T min(Collection<? extends T> coll,Comparator<? super T> comp) public static <T> T max(Collection<? extends T> coll,Comparator<? super T> comp) cara bali minimal / unsur maksimum ing koleksi ing syarat-syarat "urutan alam" (antarmuka Comparable) utawa supaya comparator liwati. public static boolean disjoint(Collection<?> c1,Collection<?> c2) Ngasilake bener yen koleksi ora duwe unsur sing padha. <T> List <T> emptyList(), <K,V> Map <K,V> emptyMap(), <T> Set <T> emptySet()- bali dhaptar kosong, peta lan nyetel, mungguh; <T> void fill(List<? super T> list, T obj)- ngisi dhaptar kanthi unsur sing diwenehake; int frequency(Collection<?> c, Object o)- ngasilake jumlah kedadeyan saka unsur tartamtu ing koleksi; <T> List <T> nCopies(int n, T o)– ngasilake dhaptar n unsur sing ditemtokake; <T> boolean replaceAll(List<T> list, T oldVal, T newVal)- ngganti kabeh unsur sing ditemtokake karo sing anyar; void reverse(List<?> list)- "mbalikke" dhaptar; void rotate(List<?> list, int distance)- ngganti dhaptar kanthi siklus kanthi jumlah unsur tartamtu; void shuffle(List<?> list)- ngacak unsur dhaptar; <T> Set <T> singleton(T o), singletonList(T o), singletonMap(K key, V value)- nggawe set, dhaptar lan peta tampilan sing dumadi saka siji unsur; <T extends Comparable<? super T>> void sort(List<T> list), <T> void sort(List<T> list, Comparator<? super T> c)- ngurutake dhaptar, kanthi urutan alami lan nggunakake Comparatorsesuai; void swap(List<?> list, int i, int j)- ngganti unsur dhaptar ing posisi sing ditemtokake. Sumber:

4. Apa cara kelas Array duwe?

Dhaptar lengkap metode kelas Array bisa dideleng ing dokumentasi . Ing ringkesan iki aku mung bakal nyebutake sawetara. [translated cara saka dokumentasi, lan sayangé ilang paling terjemahan sandi. Iku isin, lan aku ora pengin sampah wektu ing bab sing padha, aku bakal nempel apa aku googled] public static <T> List<T> asList(T... a) ngasilake dhaftar adhedhasar Uploaded. Array digunakake kanggo perwakilan internal dhaptar. Iki njaga sambungan antarane dhaptar lan array asli: owah-owahan ing array bakal dibayangke ing dhaptar:
String[] a = { "foo", "bar", "baz"};
List<String> list = Arrays.asList(a);
System.out.println(list); // [foo, bar, baz]

a[0] = "aaa";
System.out.println(list); // [aaa, bar, baz]
owah-owahan ing dhaptar bakal dibayangke ing array:
String[] a = { "foo", "bar", "baz"};
List<String> list = Arrays.asList(a);
System.out.println(list); // [foo, bar, baz]

list.set(0, "bbb");
System.out.println(Arrays.toString(a)); // [bbb, bar, baz]
Yen larik ngemot obyek, mesthine larik lan dhaptar kasebut bakal ngrujuk marang kedadeyan sing padha:
Object[] a = { new Object(), new Object(), new Object()};
List<Object> list = Arrays.asList(a);
System.out.println(a[0] == list.get(0)); // true
int binarySearch(параметры)- cara sing kakehan kanggo ngatur telusuran binar kanggo nilai ing array saka jinis primitif lan obyek. Ngasilake posisi pertandhingan pisanan; void fill(параметры)- cara sing kakehan kanggo ngisi array kanthi macem-macem jinis lan primitif; void sort(parameter) - cara overloaded kanggo ngurutake array utawa bagean nggunakake antarmuka Comparator lan tanpa iku; static <T> T[] copyOf(T[] original, int newLength)- ngisi array kanthi dawa tartamtu, mbuwang unsur utawa ngisi null yen perlu; static <T> T[] copyOfRange(T[] original, int from, int to)- nyalin area sing ditemtokake saka array menyang array anyar; <T> List<T> asList(T… a)– cara sing nyalin unsur array menyang obyek saka jinis List<T>. Sumber:

5. Apa jeneng urutan digunakake nalika nelpon Collections.sort ()?

Saka dokumentasi : Implementasine minangka adaptasi saka dhaptar dhaptar Python Tim Peters (TimSort). Implementasi iki mbucal dhaptar menyang larik, ngurutake larik, banjur ulangi dhaptar lan ngisi maneh saben unsur dhaptar saka unsur larik sing cocog. Iki ngindhari kerumitan n*n log(n) sing bakal muncul saka nyoba ngurutake dhaptar sing disambung langsung Saka wiki : Timsort minangka algoritma pangurutan hibrida sing nggabungake urut-urutan sisipan lan nggabung, diterbitake ing 2002 dening Tim Peters. Timsort saiki minangka algoritma pangurutan standar ing Python, OpenJDK 7 lan diimplementasikake ing Android JDK 1.5. Ide utama algoritma kasebut yaiku ing jagad nyata, susunan data sing bisa diurutake asring ngemot subarray sing diurutake. Ing data kasebut, Timsort luwih cepet tinimbang akeh algoritma pangurutan.

10. Apa iku iterator?

Antarmuka sing dikenalake ing release JDK 1.2 saka basa Jawa java.util.Iteratorngidini pengulangan kelas wadhah. Saben Iterator ngleksanakake metode next()lan hasNext()opsional bisa ndhukung a remove(). Iterator digawe dening kelas wadhah sing cocog, biasane dening iterator(). Cara kasebut next()nerusake iterator menyang nilai sabanjure lan ngasilake nilai kasebut menyang iterator. Nalika wiwitan digawe, iterator nuduhake nilai khusus sadurunge unsur pisanan, supaya unsur pisanan mung bisa dijupuk sawise telpon pisanan kanggo next(). Kanggo nemtokake wayahe nalika kabeh unsur ing wadhah wis diulang, cara tes digunakake hasNext(). Conto ing ngisor iki nuduhake panggunaan iterator sing gampang:
Iterator iter = list.iterator();
//Iterator<MyType> iter = list.iterator(); в J2SE 5.0
while (iter.hasNext())
    System.out.println(iter.next());
Kanggo koleksi jinis sing ndhukung iki, cara iterator remove()mbusak unsur 'dibukak' pungkasan saka wadhah. Meh kabeh jinis modifikasi wadhah liyane sajrone pengulangan ora aman. Kajaba iku, kanggo java.util.Listana java.util.ListIteratorkaro API padha, nanging ngidini pengulangan maju lan mundur, nyediakake definisi indeks saiki ing dhaftar lan pindhah menyang unsur dening posisi. Sumber: Bagean 2
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION