JavaRush /Java Blog /Random-TK /Söhbetdeşlikde sorajak zatlary: Java-daky maglumatlar gur...

Söhbetdeşlikde sorajak zatlary: Java-daky maglumatlar gurluşlary. 1-nji bölüm

Toparda çap edildi
Salam! Nädip seretseňizem, tehniki giriş söhbetdeşligini üstünlikli geçirmän işläp düzüjisi bolup bilmersiňiz. Söhbetdeşlikde sorajak zatlary: Java-da maglumat gurluşlary - 1Java bilen baglanyşykly tehnologiýalar kän, hemme zady öwrenmek mümkin däl. Düzgün bolşy ýaly, söhbetdeşlik wagtynda belli bir zat soralýar, diňe taslama üçin möhüm çarçuwada gowy tejribesi bolan işläp düzüjini gözleýän bolsa. Eger şeýle bolsa, bu çarçuwany doly tizlikde kowalap bilersiňiz, muňa şübhe ýok. Söhbetdeşlik wagtynda sorajak zatlary: Java-daky maglumatlar gurluşlary - 2Nowöne indi her Java döredijiniň bilmeli esasy barada aýdýarys. Bularyň hemmesiniň başlaýan nusgawy bilimleri hakda. Bu gün islendik söhbetdeşligiň esasy mowzuklaryndan biri - Java-daky maglumat gurluşlary barada durup geçmek isleýärin . Şeýlelik bilen, gyrymsylygyň töwereginde urmagyň ýerine başlalyň. Söhbetdeşlik wagtynda bu mowzuk hakda soraljak soraglaryň sanawyny tapyň.

1. Maglumat gurluşlary barada bize biraz aýdyň

Maglumat gurluşy, belli bir derejede düzülen maglumatlary öz içine alýan maglumat dükanydyr. Bu gurluşlar belli bir amallaryň netijeli ýerine ýetirilmegi üçin niýetlenendir. Maglumat gurluşlarynyň adaty mysallary:
  • massiwler,
  • stakanlar,
  • nobatlar,
  • baglanyşykly sanawlar,
  • grafikler,
  • agaçlar,
  • prefiks agaçlary,
  • hash tablisasy.
Olar hakda has giňişleýin maglumaty şu ýerden we şu ýerden tapyp bilersiňiz . Maglumatlar programmanyň esasy düzüm bölegi bolup, gurluşlar bu maglumatlary belli, anyk gurluş görnüşinde saklamaga mümkinçilik berýär. Programmaňyz näme etse-de, bu tarap hemişe bolar: eger web dükany bolsa, önümler baradaky maglumatlar, sosial ulgam bolsa, ulanyjylar we faýllar baradaky maglumatlar we ş.m.

2. Toplumlar barada näme bilýärsiňiz?

Bir massiw, sany öňünden kesgitlenen şol bir görnüşdäki bahalary saklamak üçin gapdyr. Setir bahalary bilen massiw döretmegiň mysaly:
String[] strArray = {"Java","is","the","best","language"};
Bir massiw döredilende, ähli elementleri üçin ýat bölünýär: elementler üçin öýjükler näçe köp kesgitlense, şonça-da köp ýat bölüner. Belli bir öýjükli boş massiw döredilen bolsa, massiwiň ähli elementlerine deslapky bahalar berler. Mysal üçin:
int[] arr = new int[10];
Şeýlelik bilen, boolean görnüşiniň elementleri bolan bir massiw üçin başlangyç ( deslapky ) bahalar ýalňyş bolar , san bahalary - 0, char görnüşiniň elementleri bilen - \ u0000 . Synp görnüşi (obýektler) üçin - null (boş setirler däl - “” ýöne ýörite null ). Aboveagny, ýokardaky mysalda, ar massiwiniň ähli bahalary gönüden-göni kesgitlenýänçä 0 bolar. Kolleksiýalardan tapawutlylykda, massiwler dinamiki däl. Belli bir ululykdaky massiw yglan edilenden soň, ululygyny üýtgedip bolmaz. Bir massiwde täze element goşmak üçin täze has uly massiw döretmeli we köne elementden ähli elementleri göçürmeli (ArrayList şeýle işleýär). Hemmeleriň bilmeýän we sizi gaty gowy tutup boljak bir nokady bar. Java-da üýtgeýänleriň iki görnüşi bar - ýönekeý görnüşler we doly hukukly obýektlere salgylanmalar . Bularyň haýsylary massiwler? Mysal üçin, şu ýerde:
int[] arr = new int[10];
Hemme zat ýönekeý ýaly - bu 10 int element . Şeýlelikde, munuň ýönekeý görnüşdigini aýdyp bilerismi? Nähili bolsa-da. Java-da massiwler obýektlerdir, dinamiki taýdan döredilýär we Obýekt görnüşiniň üýtgeýjilerine bellenip bilner. Obýekt synpynyň ähli usullaryny bir massiwde çagyryp bolar. Şonuň üçin hatda ýazyp bileris:
Object arr = new int[]{7,5,4,3};
System.out.println(arr.toString());
Konsola çykanyňyzda aşakdaky ýaly bir zat alyp bilersiňiz:
[I @ 4769b07b
Java-daky massiwleriň aýratynlyklary barada has giňişleýin okaň, Java Array hakda . Bilimleriňizi berkitmek üçin bu ýygyndydan birnäçe meseläni çözüp bilersiňiz .

3. Kolleksiýalaryň iýerarhiýasyny düşündiriň

Kolleksiýalar maglumatlar bilen işleýän wagtyňyz çeýelige mätäç bolan ýagdaýlarda ulanylýar. Kolleksiýalar bir element goşup, bir elementi aýyryp we başga-da köp amallary ýerine ýetirip biler. Java-da dürli ýerine ýetirişler bar we diňe häzirki ýagdaý üçin dogry kolleksiýany saýlamaly. Adatça, Kolleksiýa interfeýsini agzanyňyzda , käbir ýerine ýetirişlerini we Karta bilen gatnaşyklaryny sanamagyňyz haýyş edilýär . Geliň, öwreneliň. Şeýlelik bilen, Toplama we Karta maglumat gurluşlary üçin iki dürli iýerarhiýa. Collectionygyndy iýerarhiýasynyň görnüşi : KolleksiýaSöhbetdeşlik wagtynda sorajak zatlary: Java-daky maglumatlar gurluşlary - 3 interfeýsi esasy usullaryň sanawy bilen esasy ýokarky baglanyşykdyr, ondan üç sany esasy gurluş görnüşi döreýär - düzmek , sanaw , nobat . <T> toplumy, her bir obýektiň özboluşly obýektleriň ýygyndysyny görkezýän interfeýsdir. Sanaw <T> sanaw diýilýän obýektleriň tertipli yzygiderliligini görkezýän interfeýsdir. Nobat <T> nobat hökmünde düzülen elementleriň (elementleriň yzygiderli saklanmagy) jogapkär interfeýsdir. Ozal bellenip geçilişi ýaly, Karta aýratyn iýerarhiýa: Karta <K, V> elementleriň esasy jübüt hökmünde elementleri öz içine alýan sözlügi görkezýän interfeýsdir. Mundan başga-da, ähli düwmeler (K) Karta obýektiniň içinde üýtgeşikdir . Collectionygnamagyň bu görnüşi, açary - obýektiň özboluşly kesgitleýjisini bilsek, element tapmagy aňsatlaşdyrýar.Söhbetdeşlik wagtynda sorajak zatlary: Java-daky maglumatlar gurluşlary - 4

4. Set hakda näme bilýärsiňiz?

Ozal bellenip geçilişi ýaly, bu ýygyndyda köp üýtgeşik elementler bar. Başgaça aýdylanda, şol bir obýekt Java Set -de bir gezekden köp görünip bilmeýär. Şeýle hem, bir elementden san (indeks) boýunça elementi çykaryp bilmejekdigimizi belläsim gelýär - diňe zalym güýç bilen. Möhüm zat, dürli toplumlaýyn ýerine ýetirişleriň maglumatlary düzmegiň dürli usullary bar. Geljekde anyk durmuşa geçirişlere serederis. Şeýlelik bilen, “Set : HashSet” -iň esasy ýerine ýetirişleri hash tablisasyna esaslanýan toplumdyr, bu bolsa öz gezeginde gözlemäge kömek edýär. Gözleg we goýmak wagtynda öndürijiligi gowulandyrýan hash funksiýasyny ulanýar. Elementleriň sanyna garamazdan, umuman, goýmak we gözlemek (käwagt öçürmek) hemişelik wagtda ýerine ýetirilýär - O (1). Haş funksiýasyna biraz soňrak has jikme-jik serederis. Şeýle hem, “HashSet” -iň ähli jadylaryň ýüze çykýan ýeri bolan “HashMap” -yň bardygyny belläsim gelýär . Ine, Java-da HashSet hakda jikme-jik makala . LinkedHashSet - bu synp täze usul goşmazdan HashSet- i giňeldýär. LinkedList ýaly , bu synp toplumyň elementleriniň goýlan tertibi boýunça baglanyşdyrylan sanawyny ýöredýär. Bu, berlen toplumyň ýerine ýetirilişinde zerur tertibi tertipleşdirmäge mümkinçilik berýär . TreeSet synpy, elementleri saklamagyň gurluşyny tertiplemek üçin gyzyl-gara agaja esaslanýan toplum döredýär. Başgaça aýdylanda, berlen toplumda elementleri ýokarlanýan tertipde tertipläp bileris. “Gutydan”, mysal üçin, “ Integer ” -den käbir adaty zatlary ulansak, “ Integers” toplumyny ýokarlanýan tertipde tertiplemek üçin hiç zat etmeli däl:
TreeSet set = new TreeSet<>();
set.add(4);
set.add(2);
set.add(3);
set.add(1);

System.out.println(set);
Konsolda bolsa çykarys:
[1, 2, 3, 4]
Thisagny, bu toplumda sanlar tertipli görnüşde saklanýar. “TreeSet” -de setir elementlerini ulansak , tertiplener, ýöne elipbiý boýunça. Garaz, käbir standart (adaty) synpymyz bar bolsa näme etmeli? Bu synpyň obýektleri TreeSet-i nädip düzer ? Bu ýygyndyda özbaşdak bir zat bellemäge synanyşsak :
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);
“ClassCastException” alarys , sebäbi “TreeSet” bu görnüşdäki zatlary nädip tertipleşdirmelidigini bilmeýär. Bu ýagdaýda Deňeşdirilýän interfeýsi we deňeşdirme usulyny ýerine ýetirmek üçin adaty obýektimiz gerek :
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 + '\'' +
               '}';
   }
}
Üns berşiňiz ýaly, deňeşdirmek usuly int-ni görkezýär :
  • 1 häzirki (bu) obýekt uly hasap edilse;
  • -1 häzirki obýekt argument hökmünde geleninden has kiçi hasaplansa;
  • 0 obýektler deň bolsa (bu ýagdaýda ulanmaýarys).
Bu ýagdaýda TreeSet dogry işlär we netijäni görkezer:
[Pişik {ýaşy = 2, ady = 'Barsik'}, Pişik {ýaşy = 3, ady = 'Garfild'}, Pişik {ýaşy = 4, ady = 'Murzik'}]
Anotherene bir ýol, deňeşdiriji interfeýsi we deňeşdirme usulyny ýerine ýetirýän aýratyn sortlaşdyryş synpyny döretmekdir :
public class CatComparator implements Comparator {

   @Override
   public int compare(Cat o1, Cat o2) {
       return o1.age > o2.age ? 1 : -1;
   }
}
Bu ýagdaýda, ony ulanmak üçin TreeSet konstruktoryna bu synpyň obýektini bellemeli :
TreeSet set = new TreeSet<>(new CatComparator());
Ondan soň, “TreeSet” -e girýän “Cat” synpynyň ähli obýektleri “Cat Comparator” synpy arkaly tertiplener . Java -da Deňeşdiriji we Deňeşdirme hakda has giňişleýin öwrenip bilersiňiz .

5. nobat hakda gürrüň beriň

Nobat , nobat hökmünde guralan gurluşlar üçin jogapkär interfeýsdir - elementleri yzygiderli saklaýan maglumat gurluşy. Mysal üçin, adamlaryň nobatyndan ilkinji giren adam beýlekilerden has ir gelen, iň soňkusy hemmelerden giç gelen adam bolar. Bu usula FIFO diýilýär , ýagny “ First Out in First Out” . Üýtgeşik nobat usullary , mysal üçin birinji ýa-da soňky element bilen işlemäge gönükdirilendir:
  • goşmak we teklip etmek - nobatyň soňuna bir element salýar,
  • aýyrmak - bu nobatyň sözbaşysyny alýar we aýyrýar,
  • peek - nobat sözbaşysyny alýar, ýöne aýyrmaýar.
2-nji bölüm
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION