JavaRush /Blog Jawa /Random-JV /Apa sing bisa ditakoni nalika wawancara: Struktur data in...

Apa sing bisa ditakoni nalika wawancara: Struktur data ing basa Jawa. Bagean 1

Diterbitake ing grup
Hello! Ora ketompo carane sampeyan ndeleng, sampeyan ora bisa dadi pangembang tanpa kasil ngliwati wawancara teknis. Apa sing bisa ditakoni nalika wawancara: struktur data ing basa Jawa - 1Ana akeh teknologi sing ana gandhengane karo Jawa, lan ora bisa sinau kabeh. Minangka aturan, ana sing spesifik dijaluk sajrone wawancara mung yen lagi nggoleki pangembang kanthi pengalaman apik ing sawetara kerangka penting kanggo proyek kasebut. Yen mengkono, sampeyan bakal mimpin liwat framework iki ing kacepetan lengkap, sampeyan ora mangu. Sing Bisa Ditakoni Sajrone Wawancara: Struktur Data ing Jawa - 2Nanging saiki kita ngomong babagan basis sing kudu dingerteni saben pangembang Jawa. Babagan kawruh klasik saka ngendi kabeh diwiwiti. Dina iki aku pengin ndemek salah sawijining topik dhasar saka wawancara apa wae - struktur data ing Jawa . Dadi, tinimbang ngalahake grumbulan, ayo miwiti. Temokake dhaptar pitakonan sing bisa ditakoni babagan topik iki sajrone wawancara.

1. Marang kita sethitik babagan struktur data

Struktur data minangka panyimpenan data sing ngemot informasi sing disusun kanthi cara tartamtu. Struktur kasebut dirancang kanggo kinerja sing efisien kanggo operasi tartamtu. Conto khas struktur data yaiku:
  • susunan,
  • tumpukan,
  • antrian,
  • dhaptar sing gegandhengan,
  • grafik,
  • wit-witan,
  • wit ater-ater,
  • tabel hash.
Sampeyan bisa ngerteni luwih akeh babagan kene lan kene . Data minangka komponèn kunci ing program, lan struktur ngidini data iki disimpen ing wangun tartamtu, kabentuk cetha. Apa wae sing ditindakake aplikasi sampeyan, aspek iki bakal tansah ana: yen toko web, banjur informasi babagan produk bakal disimpen, yen jaringan sosial, data babagan pangguna lan file, lan liya-liyane.

2. Apa sampeyan ngerti babagan Arrays?

Array minangka wadhah kanggo nyimpen nilai saka jinis sing padha, jumlah sing wis ditemtokake sadurunge. Conto nggawe larik kanthi nilai string:
String[] strArray = {"Java","is","the","best","language"};
Nalika nggawe array, memori diparengake kanggo kabeh unsur: luwih akeh sel kanggo unsur sing pisanan ditemtokake, luwih akeh memori bakal dialokasikan. Yen array kosong kanthi jumlah sel tartamtu digawe, kabeh unsur array bakal diwenehi nilai standar. Tuladhane:
int[] arr = new int[10];
Dadi, kanggo larik kanthi unsur jinis boolean , nilai awal ( standar ) bakal palsu , kanggo larik kanthi nilai numerik - 0, kanthi unsur jinis char - \u0000 . Kanggo macem-macem jinis kelas (obyek) - null (ora strings kosong - "" nanging khusus null ). Yaiku, ing conto ing ndhuwur, kabeh nilai array arr bakal dadi 0 nganti kasebut langsung. Ora kaya koleksi, array ora dinamis. Sawise larik saka ukuran tartamtu diumumake, ukuran dhewe ora bisa diganti. Kanggo nambah unsur anyar menyang array, sampeyan kudu nggawe array sing luwih gedhe lan nyalin kabeh unsur saka sing lawas menyang (iki cara kerjane ArrayList). Ana siji titik sing ora kabeh wong ngerti lan sampeyan bisa kejiret kanthi apik. Ana rong jinis variabel ing Jawa - jinis prasaja lan referensi kanggo obyek lengkap. Kang iki arrays? Contone, kene:
int[] arr = new int[10];
Kayane kabeh iku prasaja - iki 10 unsur int . Dadi, kita bisa ngomong yen iki jinis sing prasaja? Ora ketompo carane iku. Ing Jawa, array minangka obyek, digawe kanthi dinamis lan bisa ditugasake menyang variabel jinis Obyek. Kabeh cara saka kelas Obyek bisa diarani ing array. Dadi kita malah bisa nulis:
Object arr = new int[]{7,5,4,3};
System.out.println(arr.toString());
Nalika output menyang console sampeyan bisa njaluk kaya:
[Aku@4769b07b
Waca liyane babagan fitur array ing Jawa ing artikel iki babagan Java Array . Kanggo nggabungake kawruh, sampeyan bisa ngatasi sawetara masalah saka koleksi iki .

3. Nerangake hirarki koleksi

Koleksi digunakake ing kahanan sing mbutuhake keluwesan nalika nggarap data. Koleksi bisa nambah unsur, mbusak unsur, lan nindakake akeh operasi liyane. Ana akeh implementasine beda ing Jawa, lan kita mung kudu milih koleksi tengen kanggo kahanan saiki. Biasane, yen sampeyan nyebutake antarmuka Koleksi , sampeyan dijaluk dhaptar sawetara implementasine lan hubungane karo Peta . Inggih, ayo digoleki. Dadi, Koleksi lan Peta minangka rong hirarki sing beda kanggo struktur data. Apa hierarki Koleksi katon kaya : Sing Bisa Ditakoni Sajrone Wawancara: Struktur Data ing Jawa - 3Antarmuka Koleksi minangka pranala ndhuwur tombol kanthi dhaptar cara dhasar, saka ngendi telung jinis dhasar struktur data asale - Setel , Dhaptar , Antrian . Set<T> minangka antarmuka sing nuduhake koleksi obyek sing saben obyek unik. List<T> minangka antarmuka sing nggambarake urutan obyek sing diarani dhaptar. Queue<T> minangka antarmuka sing tanggung jawab kanggo struktur sing diatur minangka antrian (panyimpenan urutan unsur). Kaya sing wis kasebut sadurunge, Map minangka hirarki sing kapisah: Sing Bisa Ditakoni Sajrone Wawancara: Struktur Data ing Jawa - 4Map<K, V> minangka antarmuka sing makili kamus sing ana unsur minangka pasangan kunci-nilai. Kajaba iku, kabeh tombol (K) unik ing obyek Peta . Koleksi jinis iki luwih gampang nemokake unsur yen kita ngerti kunci - pengenal unik obyek kasebut.

4. Apa sampeyan ngerti babagan Set?

Kaya sing wis kasebut sadurunge, koleksi iki nduweni akeh unsur unik. Ing tembung liya, obyek sing padha ora bisa katon luwih saka sapisan ing Java Set . Aku uga kaya kanggo nggawa metu sing kita ora bisa extract unsur saka Setel dening nomer (indeks) - mung dening brute force. Sing penting yaiku implementasine sing beda saka Set duwe macem-macem cara nyusun data. Kita bakal nimbang implementasine tartamtu luwih. Dadi, implementasi utama Set : HashSet minangka set sing adhedhasar tabel hash, sing uga mbantu nggoleki. Nggunakake fungsi hash sing nambah kinerja sajrone nggoleki lan sisipan. Preduli saka jumlah unsur, ing umum, selipan lan panelusuran (kadhangkala pambusakan) dileksanakake ing cedhak wektu pancet - O(1). Kita bakal nliti fungsi hash kanthi luwih rinci mengko. Aku uga kaya Wigati sing HashSet ngandhut HashMap , kang ngendi kabeh Piandel mengkono. Punika artikel rinci babagan HashSet ing Jawa . LinkedHashSet - kelas iki ngluwihi HashSet tanpa nambah cara anyar. Kaya LinkedList , kelas iki njaga dhaptar sing disambung saka unsur-unsur set ing urutan sing dilebokake. Iki ngidini sampeyan ngatur urutan sing dibutuhake ing implementasine Set sing diwenehake . Kelas TreeSet nggawe set sing adhedhasar wit abang-ireng kanggo ngatur struktur nyimpen unsur. Ing tembung liyane, ing set tartamtu kita bisa ngurutake unsur ing urutan munggah. Yen kita nggunakake sawetara obyek standar saka "kothak", contone, Integer , banjur kita ora perlu nindakake apa-apa kanggo ngatur pesawat saka Integers ing urutan munggah:
TreeSet set = new TreeSet<>();
set.add(4);
set.add(2);
set.add(3);
set.add(1);

System.out.println(set);
Lan ing console kita bakal entuk output:
[1, 2, 3, 4]
Sing, ing pesawat iki nomer disimpen ing wangun diurutake. Yen kita nggunakake unsur String ing TreeSet , bakal diurutake, nanging miturut abjad. Inggih, yen kita duwe sawetara standar (custom) kelas? Kepiye carane obyek saka kelas iki nggawe struktur TreeSet ? Yen kita nyoba nemtokake obyek sing sewenang-wenang menyang Set iki :
TreeSet set = new TreeSet<>();
set.add(new Cat(4, "Murzik"));
set.add(new Cat(2, "Barsik"));
set.add(new Cat(3, "Гарфилд"));

System.out.println(set);
Kita bakal nampa ClassCastException amarga TreeSet ora ngerti carane ngurutake obyek saka jinis iki. Ing kasus iki, kita butuh obyek khusus kanggo ngetrapake antarmuka Comparable lan metode compareTo :
public class Cat implements Comparable {
    int age;
    String name;

   public Cat(int age, String name) {
       this.age = age;
       this.name = name;
   }

   @Override
   public int compareTo(Cat cat) {
       return age > cat.age ? 1 : -1;
   }

   @Override
   public String toString() {
       return "Cat{" +
               "age=" + age +
               ", name='" + name + '\'' +
               '}';
   }
}
Kaya sing sampeyan ngerteni, metode compareTo ngasilake int :
  • 1 yèn barang saiki (iki) dianggep gêdhe;
  • -1 yen obyek saiki dianggep luwih cilik tinimbang sing teka minangka argumen;
  • 0 yen obyek padha (kita ora nggunakake iki ing kasus iki).
Ing kasus iki, TreeSet kita bakal bisa digunakake kanthi bener lan nampilake asil:
[Kucing{umur=2, jeneng='Barsik'}, Kucing{umur=3, jeneng='Garfield'}, Kucing{umur=4, jeneng='Murzik'}]
Cara liya yaiku nggawe kelas ngurutake sing kapisah sing ngetrapake antarmuka komparator lan metode mbandhingake :
public class CatComparator implements Comparator {

   @Override
   public int compare(Cat o1, Cat o2) {
       return o1.age > o2.age ? 1 : -1;
   }
}
Ing kasus iki, kanggo nggunakake, kita kudu nyetel obyek saka kelas iki kanggo konstruktor TreeSet :
TreeSet set = new TreeSet<>(new CatComparator());
Sawise iki, kabeh obyek saka kelas Cat sing kalebu ing TreeSet bakal diurutake nggunakake kelas Cat Comparator . Sampeyan bisa sinau luwih lengkap babagan Comparator lan Comparable ing Jawa saka artikel iki .

5. Marang kita bab Antrian

Antrian minangka antarmuka sing tanggung jawab kanggo struktur sing diatur minangka antrian - struktur data sing nyimpen unsur kanthi urutan. Contone, saka antrian wong, wong pisanan mlebu bakal dadi wong sing teka luwih awal tinimbang wong liya, lan sing pungkasan bakal teka luwih cepet tinimbang wong liya. Cara iki diarani FIFO , yaiku, First in First Out . Cara antrian unik fokus ing nggarap unsur pisanan utawa pungkasan, contone:
  • nambah lan nawakake - nglebokake unsur ing mburi antrian,
  • mbusak - njupuk lan mbusak header antrian iki,
  • Ndeleng - Nompo nanging ora mbusak header antrian.
BAGIAN 2
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION