JavaRush /Java Blog /Random-TK /Java-da karta barada iň gowy 9 sorag
Treefeed
Dereje

Java-da karta barada iň gowy 9 sorag

Toparda çap edildi
Kartanyň açar gymmaty jübütlerden ybarat gurluşly maglumatlardygyny we her açary diňe bir Kartada diňe bir gezek ulanyp boljakdygyny ýadyňyzdan çykarmaň . Bu mowzuk, Java-da Kartany ulanmak we ýerine ýetirilen synplar barada 9 sany esasy soragy öz içine alýar. Ityönekeýlik üçin mysallarda umumylaşdyrmalary ulanaryn . Şonuň üçin Kartany kesgitleýjini görkezmän, diňe Karta ýazaryn. Köne K we V iki bahany deňeşdirip boljakdygyny çaklap bilersiňiz , bu bolsa K deňeşdirilýär we V hem deňeşdirilýär .Java-da karta barada iň gowy 9 sorag - 1

0. Kartany sanawa öwürmek

Java-da Karta interfeýsi üç görnüşli kolleksiýa hödürleýär: açar toplumy, baha toplumy we açar bahasy toplumy. Olaryň hemmesini konstruktor ýa-da usul bilen Sanawa öwrüp bolýar addAll(). Aşakdaky kod parçasy , kartadan ArrayList ýasamagy görkezýär .
// list of keys
List keyList = new ArrayList(Map.keySet());
//list of values
List valueList = new ArrayList(Map.valueSet());
//list key-value
List entryList = new ArrayList(Map.entrySet());

1. Kartadaky ähli bahalary gözden geçiriň

Her bir möhüm bahaly jübütden ýöremek, Kartada gezmegiň iň esasy, esasy prosedurasydyr. Java-da her jübüt Map.Entry atly Map meýdançasynda saklanýar . Map.entrySet()açar-gymmatlyklar toplumyny yzyna gaýtaryp berýär, şonuň üçin Kartanyň ähli gymmatlyklaryny gaýtalamagyň iň täsirli usuly:
for(Entry entry: Map.entrySet()) {
  //get the key
  K key = entry.getKey();
  //get value
  V value = entry.getValue();
}
IteratorEsasanam JDK 1.5-den kiçi wersiýalarynda hem ulanyp bileris
Iterator itr = Map.entrySet().iterator();
while(itr.hasNext()) {
  Entry entry = itr.next();
  //get the key
  K key = entry.getKey();
  //get value
  V value = entry.getValue();
}

2. Düwmeler boýunça karta sargyt etmek

Kartalary düwmeler boýunça tertiplemek, köplenç ulanylýan başga bir prosedura. Birinji ýol, Sanawa Map.Entry goşmak we bahalar boýunça tertipleýän deňeşdiriji ulanyp tertiplemek.
List list = new ArrayList(Map.entrySet());
Collections.sort(list, new Comparator() {

  @Override
  public int compare(Entry e1, Entry e2) {
    return e1.getKey().compareTo(e2.getKey());
  }
});
Anotherene bir ýol: SortedMap ulanyň , üstesine-de açarlaryny tertipleşdirýär. Emma, ​​ähli düwmeler Deňeşdirmäni öz içine almalydyr ýa-da deňeşdiriji tarapyndan kabul edilmelidir. Geçirilen sapaklaryň biri SortedMapTreeMap . Konstruktory deňeşdirijini kabul edýär. Aşakdaky kod adaty kody nädip Mapsargyt edip boljakdygyny görkezýär.
SortedMap sortedMap = new TreeMap(new Comparator() {

  @Override
  public int compare(K k1, K k2) {
    return k1.compareTo(k2);
  }

});
sortedMap.putAll(Map);

3. Gymmatlyklar boýunça kartany sargyt ediň

Sanawa Karta goşmak we soňra tertiplemek bu ýagdaýda işleýär, ýöne bu gezek ulanmaly Entry.getValue(). Aşakdaky kod öňküsi ýaly diýen ýaly.
List list = new ArrayList(Map.entrySet());
Collections.sort(list, new Comparator() {

  @Override
  public int compare(Entry e1, Entry e2) {
    return e1.getValue().compareTo(e2.getValue());
  }

});
Bu ýagdaýda henizem ulanyp bileris SortedMap, ýöne diňe gymmatlyklar üýtgeşik bolsa. Bu ýagdaýda açar bahasy jübütini açar bahasyna öwrüp bilersiňiz. Bu çözgüdiň gaty çäklendirmeleri bar we men maslahat beremok.

4. Statik / üýtgewsiz Kartany başlamak

Kartanyň üýtgewsiz galmagyny isleseňiz, gowy usul ony üýtgewsiz Karta göçürmekdir. Bu gorag programmirleme usuly, diňe bir ulanmak üçin howpsuz bolman, eýsem sapakdan hem ygtybarly Kartany döretmäge kömek eder. Statik / üýtgewsiz Kartany başlatmak üçin başlangyç ulanyp bileris static(aşaga serediň). Bu kod bilen baglanyşykly mesele, Karta diýlip yglan edilse-de static final, meselem, başlangyçdan soň hem işläp bileris Test.Map.put(3,"three");. Şonuň üçin bu hakyky üýtgewsizlik däl. Statik başlangyjy ulanyp üýtgewsiz Kartany döretmek üçin bize iň soňky başlangyç ädiminde üýtgewsiz Karta goşjak super anonim synp gerek. Koduň ikinji bölegine serediň. Haçan-da ylgaýan bolsaňyz, goldanmaýan operasiýaExceptionTest.Map.put(3,"three"); zyňylar .
public class Test {

  private static final Map Map;
  static {
    Map = new HashMap();
    Map.put(1, "one");
    Map.put(2, "two");
  }
}
public class Test {

  private static final Map Map;
  static {
    Map aMap = new HashMap();
    aMap.put(1, "one");
    aMap.put(2, "two");
    Map = Collections.unmodifiableMap(aMap);
  }
}
Guava kitaphanasy statiki we üýtgewsiz kolleksiýalary başlatmagyň dürli usullaryny hem goldaýar. Guawanyň üýtgewsiz kolleksiýalar peýdasynyň artykmaçlyklary barada has giňişleýin maglumat üçin Guava How-to-da üýtgewsiz kolleksiýalar bölümine serediň .

5. “HashMap”, “TreeMap” we “Hashtable” -iň arasyndaky tapawut

Java-da Karta interfeýsiniň üç esasy ýerine ýetirilişi bar : HashMap , TreeMap we Hashtable . Esasy tapawutlar aşakdakylar:
  • Geçiş tertibi “HashMap” we “HashTable” Kartanyň sargyt edilmegini kepillendirmeýär; esasanam buýrugyň wagtyň geçmegi bilen üýtgewsiz galjakdygyny kepillendirmeýärler. Itöne TreeMapähli bahalary düwmeleriň "tebigy tertibi" ýa-da deňeşdiriji tarapyndan sargyt eder.
  • Dogry açar bahasy jübütleri. HashMapnull açary we null bahasyna eýe bolmaga mümkinçilik berýär. HashTablenull açary ýa-da null bahasyna rugsat bermeýär. Tebigy tertip ulanylsa TreeMapýa-da deňeşdiriji null açara rugsat bermese, kadadan çykma bolar.
  • Sinhronizasiýa . Diňe HashTablesinhronlaşdyrylan, galanlary beýle däl. Emma, ​​"sapakdan ygtybarly durmuşa geçirmek zerur bolmasa, ulanmak maslahat berilýär HashMap" HashTable.
Has jikme-jik deňeşdirme
.                       | HashMap | HashTable | TreeMap
-------------------------------------------------------

Упорядочивание          |нет      |нет        | да
null в ключ-meaning    | да-да   | нет-нет   | нет-да
синхронизировано        | нет     | да        | нет
производительность      | O(1)    | O(1)      | O(log n)
воплощение              | корзины | корзины   | красно-чёрное дерево
HashMap vs. gatnaşyklar barada has giňişleýin okaň . TreeMap vs. Hashtable vs. LinkedHashMap .

6. Ters gözleg / görnüş bilen karta

Käwagt, açar açar jübütleriň toplumy gerek, bu bolsa bahalaryň düwmeler ýaly özboluşlydygyny (ýeke-täk nagyş) aňladýar. Bu yzygiderlilik, Kartada "ters görnüş / gözleg" döretmäge mümkinçilik berýär. .Agny, açary onuň bahasy boýunça tapyp bileris. Bu maglumat gurluşyna iki taraplaýyn karta diýilýär , gynansakda JDK tarapyndan goldanylmaýar. “Apache” umumy kolleksiýalary we “Guava” degişlilikde BidiMap we BiMap atly iki taraplaýyn Kartany durmuşa geçirmegi teklip edýärler. Ikisi hem düwmeler bilen bahalaryň arasynda 1: 1 kartalaşdyrmagy üpjün edýän çäklendirmäni girizýärler.

7. Kartanyň göçürme nusgasy

Hemmesi diýen ýaly, hemmesi bolmasa, Java-da Kartalar başga bir Karta üçin göçürme konstruktoryny öz içine alýar. Emma göçürmek prosedurasy sinhronlaşdyrylanok. Diýmek, bir sapak Kartany göçürende, başga bir sapak gurluşyny üýtgedip biler. Duýdansyz göçürme deshronizasiýasynyň öňüni almak üçin, şular ýaly ýagdaýda birini ulanmaly Collections.synchronizedMap().
Map copiedMap = Collections.synchronizedMap(Map);
Çuňňur göçürmegiň başga bir gyzykly usuly, ulanmak clone(). Javaöne Java kolleksiýalarynyň çarçuwasyny dörediji Joşua Bloç hem maslahat bermeýär. " Göçüriji konstruktor vs. Klonirlemek " çekişmesinde ol pozisiýa eýeleýär: Sitata: "Men köplenç anyk synplarda köpçülige açyk klon usulyny hödürleýärin, sebäbi adamlar şol ýerde bolmagyna garaşýarlar. ... Klonirlemegiň bozulmagy utanç, ýöne bu bolup geçdi. ... Klonirlemek gowşak bir zat, adamlara çäklendirmeleri barada duýduryş berilmelidir öýdýärin. " clone()Şol sebäpli, Kartany göçürmek usulyny nädip ulanmalydygyny hem görkezmeýärin

8. Boş Kartany dörediň

Üýtgemeýän bolsa Map, ulanyň:
Map = Collections.emptyMap();
, A-da başga bir görnüşi ulanyň. Mysal üçin:
Map = new HashMap();
END
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION