JavaRush /Java Blog /Random-TK /Karta interfeýsi barada iň meşhur soraglara jogap

Karta interfeýsi barada iň meşhur soraglara jogap

Toparda çap edildi
Salam! Bu gün Karta hakda iň köp ýaýran soraglara jogap bereris, ýöne ilki bilen onuň nämedigini ýada salalyň. Karta interfeýsi barada iň meşhur soraglara jogaplar - 1Karta, esasy ähmiýetli jübütleriň toplumyny öz içine alýan maglumat gurluşydyr. Maglumatlaryň gurluşy sözlüge meňzeýär, şonuň üçin köplenç şeýle atlandyrylýar. Şol bir wagtyň özünde, Karta interfeýs bolup , adaty jdk-de esasy ýerine ýetirişleri öz içine alýar: Hashmap, LinkedHashMap, Hashtable, TreeMap. Iň köp ulanylýan “Haşmap”, şonuň üçin ony mysallarymyzda ulanarys. Kartanyň adaty döredilmegi we doldurylmagy şu:
Map<Integer, String> map = new HashMap<>();
map.put(1, "string 1");
map.put(2, "string 2");
map.put(3, "string 3");
We açar bilen gymmatlyklary nädip almaly:
String string1 = map.get(1);
String string2 = map.get(2);
String string3 = map.get(3);
Aboveokardakylaryň hemmesi düşnükli bolsa, geliň meşhur soraglara jogaplarymyza geçeliň!

0. Maphli karta bahalary arkaly nädip gaýtalamaly

Gymmatlyklaryň üstünde durmak, kartalar bilen ýerine ýetirýän iň köp ulanylýan işiňizdir. Keyhli açar bahaly jübütler içerki Map.Entry interfeýsinde saklanýar we olary almak üçin jaň etmeli entrySet(). Aýlanyp boljak jübütler toplumyny yzyna gaýtaryp berýär:
for(Map.Entry<Integer, String> entry: map.entrySet()) {
   // get key
   Integer key = entry.getKey();
   // get value
   String value = entry.getValue();
}

Или используя итератор:
Iterator<Map.Entry<Integer, String>> itr = map.entrySet().iterator();
while(itr.hasNext()) {
   Map.Entry<Integer, String> entry =  itr.next();
   // get key
   Integer key = entry.getKey();
   // get value
   String value = entry.getValue();
}

1. Kartany nädip Sanawa öwürmeli

Karta interfeýsinde elementleriň sanawyny gaýtaryp berýän 3 usul bar:
  • keySet () - düwmeler toplumyny görkezýär;
  • bahalar () - bahalar ýygyndysyny görkezýär;
  • enterSet () - açar baha toplumynyň toplumyny görkezýär.
Synpyň konstruktorlaryna seretseňiz ArrayList, “Collection” görnüşli argumentli konstruktoryň bardygyny görersiňiz. Set kolleksiýanyň nesli bolansoň, ýokardaky usullaryň hemmesini synpyň konstruktoryna geçirip bolýar ArrayList. Şeýlelik bilen täze sanawlar dörederis we olary aşakdaky bahalar bilen doldurarys Map:
// key list
List<Integer> keyList = new ArrayList<>(map.keySet());
// value list
List<String> valueList = new ArrayList<>(map.values());
// key-value list
List<Map.Entry<Integer, String>> entryList = new ArrayList<>(map.entrySet());

2. Karta düwmelerini nädip tertipleşdirmeli

Kartalary tertiplemek programmirlemekde hem adaty bir iş. Muny birnäçe ýol bilen edip bilersiňiz:
  1. Map.Entry sanawa giriziň we Deňeşdiriji ulanyp tertipläň .

    Deňeşdirijide diňe jübütleriň açarlaryny deňeşdireris:

    List> list = new ArrayList(map.entrySet());
    Collections.sort(list, new Comparator<Map.Entry<Integer, String>>() {
       @Override
       public int compare(Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) {
           return o1.getKey() - o2.getKey();
       }
    });
    

    Lambdalara düşünýän bolsaňyz, bu ýazgyny ep-esli gysgaldyp bolar:

    Collections.sort(list, Comparator.comparingInt(Map.Entry::getKey));
  2. Konstruktorynda Deňeşdiriji alýan SortedMapýerine ýetirişini ulanyň . TreeMapBu deňeşdiriji karta düwmelerine ulanylar, şonuň üçin düwmeler interfeýsi amala aşyrýan synplar bolmaly Comparable:

    SortedMap<Integer, String> sortedMap = new TreeMap<>(new Comparator<Integer>() {
       @Override
       public int compare(Integer o1, Integer o2) {
           return o1 - o2;
       }
    });

    Elbetde, hemme zady lambdalar ulanyp täzeden ýazyp bolar:

    SortedMap<Integer, String> sortedMap = new TreeMap<>(Comparator.comparingInt(o -> o));

    SortedMap ulanyp, ilkinji usuldan tapawutlylykda, maglumatlary elmydama tertipli görnüşde saklarys.

3. Kartanyň bahalaryny nädip tertipleşdirmeli

Bu ýerde düwmeler üçin birinjisine meňzeş çemeleşmäni ulanmaly - bahalaryň sanawyny alyň we sanawda tertipläň:
List <Map.Entry<Integer, String>> valuesList = new ArrayList(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Integer, String>>() {
   @Override
   public int compare(Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) {
       return o1.getValue().compareTo(o2.getValue());
   }
});
Munuň üçin lambda şeýle görünýär:
Collections.sort(list, Comparator.comparing(Map.Entry::getValue));

4. HashMap, TreeMap we Hashtable arasynda näme tapawut bar?

Öň bellenip geçilişi ýaly, Karta interfeýsiniň 3 esasy ýerine ýetirilişi bar. Olaryň hersiniň öz aýratynlyklary bar:
  1. Elementleriň tertibi. HashMapwe Hashtablezatlaryň goşulan tertipde saklanjakdygyna kepil geçmäň. Mundan başga-da, wagtyň geçmegi bilen elementleriň tertibiniň üýtgemezligini kepillendirmeýärler. Öz gezeginde, TreeMapelementleriň goşulan tertipde ýa-da berlen deňeşdirijä laýyklykda saklanmagyny kepillendirýär.

  2. Dogry bahalar. HashMapaçary we null bahasyna eýe bolmaga mümkinçilik berýär, HashTableýok. TreeMap, diňe deňeşdiriji rugsat berse, null bahalary ulanyp biler. Deňeşdiriji ulanmazdan (jübütleri goşulan tertipde saklamak bilen) null-a rugsat berilmeýär.

  3. Sinhronizasiýa. Diňe HashTablesinhronlaşdyrylan, galanlary beýle däl. Karta dürli sapaklar girip bilmese, HashTable ýerine HashMap ulanmak maslahat berilýär.

Durmuşa geçirmegiň umumy deňeşdirmesi:
HashMap HashTable TreeMap
Elementleriň tertibi .Ok .Ok Hawa
gymmaty hökmünde null Hawa .Ok Aslynda beýle däl
Tekstiň howpsuzlygy .Ok Hawa .Ok
Elementleri gözlemegiň algoritmiki çylşyrymlylygy O (1) O (1) O (log n)
Kapotyň aşagyndaky maglumatlar gurluşy hash tablisasy hash tablisasy gyzyl-gara agaç

5. Iki taraplaýyn kartany nädip döretmeli

Käwagt düwmeleriň we bahalaryň özboluşly boljak maglumat gurluşyny ulanmak zerur bolýar, ýagny kartada açar açar jübütleri bolar. Bu maglumat gurluşy, kartada “ters görnüş / gözleg” döretmäge mümkinçilik berýär. Valueagny, gymmaty boýunça açary tapyp bileris. Bu maglumat gurluşyna iki taraplaýyn karta diýilýär, gynansak-da, JDK tarapyndan goldanylmaýar. Emma, ​​bagtymyza, ony durmuşa geçirmek Apache umumy ýygyndylarynda ýa-da Guava kitaphanalarynda tapylyp bilner. Ol ýerde degişlilikde BidiMap we BiMap diýilýär. Bu amallar, açarlaryň we gymmatlyklaryň özboluşlylygyna çäklendirmeler girizýär. Bu ýeke-täk gatnaşyk döredýär.

6. Boş Kartany nädip döretmeli

Boş kartany döretmegiň iki ýoly bar:
  1. Adaty obýektiň başlangyjy:

    Map<Integer, String> emptyMap = new HashMap<>();
  2. Üýtgemez boş kartany döretmek:

    Map<Integer, String> emptyMap =  Collections.emptyMap();
Şeýle karta maglumatlary goşjak bolanymyzda alarys: UnsupportedOperationExceptionkadadan çykma. Bu makalada, Karta interfeýsini ulananyňyzda iň köp ýaýran soraglara göz aýladyk.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION