JavaRush /Java Blog /Random-TK /ArrayList synpynyň jikme-jik derňewi [1-nji bölüm]
Vonorim
Dereje

ArrayList synpynyň jikme-jik derňewi [1-nji bölüm]

Toparda çap edildi
Bu makala, yzygiderli ýygyndylara esaslanandygy sebäpli düşünmek iň aňsat bolan Kolleksiýa çarçuwasyndan “ArrayList” synpyna jikme-jik sereder. Söhbetdeşlikde size bu synp we Java-da durmuşa geçirilişi barada sorag berler. Ikinji bölümde galan usullary seljereris we sanlar üçin dinamiki massiwiň ýerine ýetirilişini ýazarys. ArrayList synpy AbstractList synpyndan miras alýar we aşakdaky interfeýsleri amala aşyrýar: Sanaw, RandomAccess, Cloneable, Serializable. “ArrayList” synpynyň jikme-jik derňewi [2-nji bölüm] “ ArrayList synpynyň jikme-jik derňewi [1-nji bölüm] - 1 ArrayList” synpy zerur bolanda giňeldilip bilinjek dinamiki massiwleri goldaýar. Onuň zerurlygy we täsirliligi yzygiderli bir massiwiň kesgitli uzynlygy bilen düşündirilýär: döredilenden soň ösüp ýa-da kiçelip bilmeýär, bu massiwiň näçeräk zerur boljakdygy belli bolmasa çäklendirmeleri girizýär. Aslynda, “ArrayList” synpy obýektleriň salgylanmalarynyň üýtgeýän uzynlyk sanawydyr. Içerki massiwiň ululygynyň (öýjükleriň sany) elementler ondan aýrylanda awtomatiki azalmaýandygyna düşünmek möhümdir. sizeAslynda, massiwde bar bolan elementleriň sanyny görkezýän üýtgeýjiniň bahasy azalýar. “ArrayList” synpynyň täze obýektini döredýäris we oňa 5 element goşýarys diýeliň. Düzgüne görä, 10 elementden ybarat massiw döredilýär. Bu ýagdaýda obýektimiziň kuwwaty (ululygy / göwrümi) diýilýän zat 10-a deň bolar, ýöne üýtgeýjiniň bahasy sizebäşe deň bolar. Elementleri aýyranymyzda, üýtgeýjiniň bahasynyň üýtgemegini görýäris size, sebäbi .lengthArrayList synpynyň içki massiwine girip, onuň uzynlygyny bilip bilmeris. Ululygy trimToSize()soňrak ara alnyp maslahatlaşyljak goşmaça usul bilen kiçeldilip bilner. Synp meýdanlaryna seredeliň.
  • Dinamiki massiwiň deslapky göwrümi üçin jogapkär meýdan:

    private static final int DEFAULT_CAPACITY = 10

    Täze ArrayList <> () (parametrleri bolmadyk konstruktor) täze obýekt döredilende içerde 10 elementden ybarat massiw döredilýär.

  • Theygyndynyň ähli elementleriniň saklanýan ýeri:

    transient Object[] elementData

    Açar söz bilen bellendi transient- adaty seriallaşdyrma algoritmini ulananyňyzda meýdan baýt akymyna ýazylmaýar. Meýdanyň açar söz bilen bellenmändigini bellemelidiris private, ýöne bu höwürtgelenen synplardan (mysal üçin SubList) bu meýdana girmegi aňsatlaşdyrmak üçin edildi.

  • Aslynda massiwde elementleriň sanyny saklaýan hasap meýdany:

    private int size

    Goýmak we pozmak ýaly amallary ýerine ýetireniňizde bahasy ýokarlanýar / azalýar.

Synpda ýene 3 meýdan bar, ýöne aslynda olar goşmaça, şonuň üçin olary göz öňünde tutmagyň manysy ýok. Synpda üç konstruktor bar:
  1. public ArrayList()- 10 elementden ybarat boş sanaw sanawyny döredýär;
  2. public ArrayList(Collection < ? extends E > c)- geçen ýygyndydan elementler bilen başlanan sanaw sanawyny döredýär (käbir kolleksiýa esasynda täze ArrayList döretmek islesek);
  3. public ArrayList(int initialCapacity)- başlangyç kuwwaty bolan sanaw sanawyny döredýär. Geçirilen parametr başlangyçCapacity 0-dan uly bolsa, görkezilen ululykdaky bir massiw döredilýär (içerki meýdan elementiData täze görnüş massiwine baglanyşyk berilýär. Parametr 0 bolsa, boş massiw döredilýär. Görkezilen parametr 0-dan az bolsa, onda IllegalArgumentException zyňylýar.
Obýekt döretmek
List < String> list = new ArrayList<>();
Täze döredilen obýekt listhäsiýetleri (meýdanlary) elementDatawe size. Gymmatlyk dükany, biziň ýagdaýymyzda elementDatabelli bir görnüşdäki (umumy görnüşde görkezilen) massiwden başga zat däl . Parametrleri bolmadyk konstruktor çagyrylsa, deslapky görnüşde Obýekt görnüşiniň 10 elementinden ybarat massiw dörediler (görnüşine guýmak bilen). Elementleri goşmak Klassiki elementleri sanaw sanawyna goşmak, artykmaç ýüklenen wariantlary ulanmak arkaly amala aşyrylýar . <>String[]ArrayList synpynyň jikme-jik derňewi [1-nji bölüm] - 2add()
public boolean add(E элемент)
Geliň, goşalyň: list.add("0"); ArrayList synpynyň jikme-jik derňewi [1-nji bölüm] - 3Bu usulyň içinde usulyň artykmaç görnüşi add()diýilýär, bellik edilýär private, bu bolsa öz gezeginde üç parametr alýar: goşulmaly element, içki massiw we ululygy. Şahsy usulda barlag ýüze çykýar: eger geçen ululyk parametri içerki massiwiň uzynlygyna deň bolsa (ýagny, massiw doly), onda massiw usulyň netijesi ( grow(int minCapacity)meýdanyň häzirki bahasy) berilýär ululygy + 1 usula geçirilýär, sebäbi goşulýan elementi göz öňünde tutmaly), içerki massiwde asyl massiwiň elementlerini göçürmek arkaly alnan täze döredilen massiw bilen baglanyşyk berilýär:
Arrays.copyOf(elementData, newCapacity(minCapacity))
Usulyň ikinji parametri hökmünde, täze massiw ölçegi hasaplanýan copyOfusulyň netijesini görkezýäris . newCapacity(int minCapacity)Aşakdaky formula bilen hasaplanýar: int newCapacity = oldCapacity + (oldCapacity >> 1) Adaty ululykdaky massiw üçin aşakdakylar dogry bolar: >> 1- birneme sag tarapa süýşüriň (bir sanyny ýarysyna çenli azaldýan operator). Aslynda, 1-iň güýjüne 2-e bölmek diýmekdir. 10-dan 2-e bölýäris we 10-a goşýarys. Jemi, massiwiň täze kuwwaty 15, ýöne 11-nji elementi goşýandygymyz üçin 15 + 1 = 16. Geliň, sanawymyza gaýdyp geleliň we oňa eýýäm 10 element goşduk we 11 goşmaga synanyşalyň öýdýän. Çek, massiwde boş ýeriň ýokdugyny görkezer. Arrays.copyOfŞoňa laýyklykda ulgam usulyny ulanýan täze massiw döredilýär we atlandyrylýar System.arraycopy(). ArrayList synpynyň jikme-jik derňewi [1-nji bölüm] - 4ArrayList synpynyň jikme-jik derňewi [1-nji bölüm] - 5Ora-da JavaRush-daky bir makaladan aýdyň mysal: ArrayList synpynyň jikme-jik derňewi [1-nji bölüm] - 6Bu barlaglaryň hemmesinden we zerur bolsa massiwiň göwrümini ulaltmakdan soň, şahsy usulda add()massiwiň soňuna täze element goşulýar we häzirki parametr sizebir köpelýär . Köne massiw soňra zibil ýygnaýjy tarapyndan gaýtadan işlener. Dinamiki massiwiň işleýşi şeýle: elementleri goşanymyzda, entegem ýeriň bardygyny ýa-da ýokdugyny barlaýarys. Boş ýer bar bolsa, elementi massiwiň soňuna goşarys. Ahyry massiwdäki iň soňky öýjügi däl-de, gymmata laýyk öýjügi aňladýar size. Ilkinji elementi massiwde goşduk, indeks bilen öýjüge ýerleşdirildi [0]. Meýdanyň bahasy sizebir we = 1 ýokarlandy. Indiki elementi goşýarys: şoňa size = 1görä elementi öýjüge indeks [1] we ş.m. goýýarys. Iki parametrli usulyň artykmaç görnüşi bar:
public void add(int index, E element)
Element goşmak isleýän öýjügimiziň ýagdaýyny (indeksini) kesgitläp bileris. Ilki bilen, görkezilen indeks bahasynyň dogrulygy barlanýar, sebäbi hiç zat ýok ýa-da ýok bolan öýjügi görkezýän nädogry indeks görkezilmegi mümkin. Indeksleri barlamak: index > size || index < 0- görkezilen görkeziji massiwiň häzirki ululygyndan uly bolsa ýa-da 0-dan pes bolsa, onda kadadan çykma bolýar IndexOutOfBoundsException. Soň bolsa, zerur bolsa, ýokardaky mysala meňzeş massiwiň ululygy ýokarlanýar. Bir massiwdäki amallary goşmak / aýyrmak wagtynda bir zadyň (sag ýa-da çepe) geçirilýändigini eşiden bolsaňyz gerek. Şeýlelik bilen, smena massiwi göçürmek arkaly amala aşyrylýar: System.arraycopy(elementData, index, elementData, index + 1, s - index); Görkezilen indeksiň sag tarapynda ýerleşýän ähli elementler bir pozisiýa saga (indeks + 1) geçiriler. Diňe şondan soň görkezilen görkezijide içerki massiwde täze element goşulýar. Toplumyň bir bölegini sag tarapa geçirendigimiz üçin (täze massiw döredilmeýär), zerur öýjük ýazmak üçin mugt bolar. Köne massiwdäki baglanyşyk öçürildi we geljekde zibil ýygnaýjy tarapyndan ele geçiriler. "Maserati" öýjügine [3] goýuň, ol eýýäm eýeleýär:
ArrayList synpynyň jikme-jik derňewi [1-nji bölüm] - 7
Şeýlelik bilen, bir element indeksde goýlanda we massiwde boş ýerler ýok bolsa, jaň System.arraycopy()iki gezek bolar: birinjisi grow(), ikinjisi usulyň özünde add(index, value), bu goşma amalynyň tizligine aç-açan täsir eder. Netijede, içerki massiwde başga bir element ýazmak zerur bolsa, ýöne ol ýerde boş ýer ýok bolsa, “ArrayList” -iň içinde şeýle bolýar:
  • Asyl nusgasyndan 1,5 esse uly we bir element bilen täze massiw döredilýär.
  • Köne massiwdäki ähli elementler täze massiwde göçürilýär
  • Täze massiw “ArrayList” obýektiniň içki üýtgeýjisinde saklanýar we köne massiw zibil diýlip yglan edilýär.
“ArrayList” görnüşindäki obýektleriň kuwwatyny usul bilen el bilen artdyryp bolar:
public void ensureCapacity(int minCapacity)
Aralyk kuwwatyny öňünden köpeltmek bilen, soňra RAM-yň goşmaça paýlanmagynyň öňüni alyp bilersiňiz. Usul, geçen elementleriň sanyny ýerleşdirmek üçin içerki massiwiň ululygyny ýokarlandyrýar minCapacity. Usul ensureCapacity()meýdana täsir etmeýär , içki massiwine (ululygyna) sizetäsir edýär . capacityBothene-de bir gezek belläp geçýärin, sizeikisem capacitydürli zat we olary bulaşdyrmazlyk gaty möhümdir! “ArrayList” -iň gurlan esasy massiwiniň göwrümini häzirki saklanýan elementleriň sanyna çenli azaltmak isleseňiz, jaň etmeli trimToSize(). Toplumdan elementleri aýyrandan soň, size()aslynda bar bolan elementleriň sanyny görkezer we capacityazalmaz! Aýdalyň: 100 elementi girizdik, ilkinji 50-ni pozduk, size50-e deň bolar we capacity100-e galar. Azaltmak üçin , ähli güýjümizi häzirki ululyga laýyklaşdyrýan capacityusuly ulanmalydyrys . trimToSize()Bu nähili gabat gelýär? Boş öýjükler galmaz ýaly massiwimizi göçüriň (täze massiwiň uzynlygy ululyk meýdanyna deňdir).
ArrayList synpynyň jikme-jik derňewi [1-nji bölüm] - 8
Şeýle hem, kolleksiýamyza elementleri goşup bilersiňiz addAll.
public boolean addAll(Collection< ? extends E> c)
public boolean addAll(int index, Collection< ? extends E> collection);
Birinji wariant, usul parametrinde görkezilen ýygyndydan (mysal üçin, başga bir sahypa) usul çagyryşynyň edilen asyl kolleksiýasyna (ahyrynda goýuň) ähli elementleri goşmaga mümkinçilik berýär. Geçirilen kolleksiýa (toplumy hem bolup biler) ulanyp, massiwine öwrüler toArray(). Elbetde, goşmak amaly göçürmek arkaly hem amala aşyrylýar. Ikinjisi, collectionindeksden başlap, sanawa ähli elementleri goşmak index. Bu ýagdaýda sanawdaky elementleriň sany boýunça ähli elementler sag tarapa geçer collection. Elementleri aýyrmak Ilki bilen, “ArrayList” -den elementleri aýyrmagyň nusgawy wariantlaryna seredeliň.
public E remove(int index)
Indeks boýunça öçürmegi ýerine ýetirýär we indiki (görkezilen indeksdäki elementden soň) elementleri çepe geçirýär we şeýlelik bilen “deşikleri” ýapýar. Şeýle hem, öçürilmezden ozal goşmaça üýtgeýjä ýazylan öçürilen elementi (E) yzyna gaýtaryp berýär, usuly çagyryş netijesinde alýan gymmaty. E-iň nämedigine düşünmek üçin umumy görnüşler bilen tanyş bolmaly bolarsyňyz. E belligi, usulyň ArrayList obýekti döredilende görkezilen maglumat görnüşini yzyna gaýtaryp berýändigini görkezýär (ýadyňyzda saklaň: List <String> listşoňa görä bu ýagdaýda E “çalşylýar” String). Umumy düşünmek üçin umumy görnüşler bilen tanyşmagyňyzy maslahat berýärin. Girizilen indeksiň dogrulygy barlanýar, soňra usulyň içinde element düýbünden ýok edilmeýär, ýöne fastRemove(Object[] es, int i)öçürmek eýýäm bolup geçýän hususy usul diýilýär. Biz öz massiwimizi we görkezilen görkezijini giriş hökmünde usula geçirýäris. Elementler ulanylyp göçürilýär System.arraycopy(), massiwiň ululygy azalýar, soň bolsa soňky elemente null belläris. Täze bir massiwiň döredilmändigini bellemelidiris: System.arraycopy(es, i + 1, es, i, size - 1 - i); Görkezilen indeksiň (i + 1) aşagyndaky pozisiýanyň sag tarapyndaky bölegi asyl massiwimize göçürilýär we ol şol ýerden başlaýar. (i) ýok edilmeli elementiň ýerleşýän ýeri. Şeýlelik bilen, çepe süýşüp, elementimizi pozduk.
Подробный разбор класса ArrayList [Часть 1] - 9
3-nji indeksdäki elementi aşakdaky massiwden aýyrmaga synanyşalyň:
Подробный разбор класса ArrayList [Часть 1] - 10
Usulyň ikinji wersiýasyna seredeliň:
public boolean remove(Object o)
Usul geçen elementi sanawdan o, has dogrusy, görkezilen baglanyşykdaky obýekti aýyrýar. Sanawda bir element bar bolsa, ol aýrylýar we ähli elementler çepe geçirilýär. Sanawda element bar bolsa we üstünlikli aýrylsa, usul dogry gaýdyp geler, ýogsam ýalňyş. Indeks bilen öçürmek opsiýasyna meňzeş usul fastRemove(), edil şol bir hereketleriň ýüze çykýan ýerinde diýilýär. Tapawut, bu usul goşmaça obýekt synpy remove(Object o)usuly arkaly islenýän zady gözleýär . equals()Bahasy bilen aýrylanda, aýlaw tapylýança aýlaw sanawyň ähli elementlerinden geçýär. Diňe tapylan ilkinji element ýok ediler. Gysgaça jemläliň: dinamiki massiwdäki elementleri pozanyňyzda, adaty massiwdäki ýaly deşik galmaýar (öçürilen öýjük boş bolmaz). Ondan soňky ähli elementler (indeksiň sag tarapynda) bir pozisiýa çepe geçirilýär. Sanawdan elementleri dürli derejelere çykarmak üçin ulanyp boljak birnäçe goşmaça usul bar. Geliň, olara gysgaça seredeliň. Kolleksiýamyzy arassalamak:
public void clear()
Simpleönekeý aýlaw, forher elemente null belläp, massiwiň ähli elementleriniň üsti bilen gaýtalanýar. Şuňa meňzeş başga bir kolleksiýadaky elementleri kolleksiýamyzdan aýryp bilersiňiz:
public boolean removeAll(Collection< ?> c)
Birnäçe elementi aýyrmaly bolsaňyz, şertli aýlawda etmeli dälsiňiz: usuly ulanmak has amatly we has ygtybarly removeAll(). Sanawdan aýryljak elementleriň ýygyndysyny kabul edýär. Theygyndyda maksat sanawynyň saklaýan görnüşi bar. Otherwiseogsam zyňylar ClassCastException. Usul çagyryşynyň netijesinde sanaw üýtgedilen bolsa, usul hakyky bolar.
Подробный разбор класса ArrayList [Часть 1] - 11
Geçen kolleksiýa degişli bolmadyk elementleri aýyrýar:
public boolean retainAll(Collection< ?> c)
Подробный разбор класса ArrayList [Часть 1] - 12
Aygyndymyz bar diýeliň:
List< String> listFirst = new ArrayList<>();
listFirst.add("White");
listFirst.add("Black");
listFirst.add("Red");
Ikinjisi:
List< String> listSecond = new ArrayList<>();
listSecond.add("Green");
listSecond.add("Red");
listSecond.add("White");
listSecond.retainAll(listFirst)Ondan soň listSecondgalar:

"White"
"Red"
"Greenaşyl" aýrylansoň, ýok listFirst. listSecond.removeAll(listFirst)Emma şondan soň listSecondgalar:

"Green"
Удалorсь все элементы, которые есть в listFirst.
Geçirilen kolleksiýa degişli däl - geçen kolleksiýada ýok elementler bar bolsa, olary birinjisinden aýyrmaly (bu usul ulanylýar). Geçirilen kolleksiýa degişlidir - şoňa görä, birinji we ikinji (geçirilen) kolleksiýalarda bir element bar bolsa, birinjisinden dublikat ýok edilýär.
protected void removeRange(int fromIndex, int toIndex)
Sanawdan başlangyç görkezilen indeks (öz içine alýan) bilen gutarýan görkezilen indeksiň arasynda (ähli zady öz içine almaýar) ähli elementleri aýyrýar. Usuly göni ArrayList obýektine çagyryp bolmaýandygyny bellemelidiris. Ony ulanmak üçin miras almaly AbstractList/ArrayList. Bu usul başga bir usul bilen hem ulanylýar (soňrak ara alnyp maslahatlaşylar).
public boolean removeIf(Predicate< ? super E> filter)
Berlen predikata esaslanýan ýygyndydan elementleri aýyrýar. Kesgitlemäniň özi belli bir funksiýa / algoritm / şert bolup, onuň esasynda belli bir şerte laýyk bir ýa-da birnäçe element aýrylar. Predicate- funksional interfeýs (diňe bir usuly öz içine alýar, şonuň üçin lambda hökmünde ulanylyp bilner), "bir parametr aldy - yzyna gaýtaryldy" prinsipinde işleýär. Aslynda, usul interfeýsden ýerine ýetirilişi ýok edýär Collectionwe aşakdaky "strategiýany" durmuşa geçirýär: elementleriň üstünden geçýär we biziň bilen gabat gelýänleri belleýär Predicate; soň birinji gezek gaýtalanan elementleri aýyrmak (we üýtgetmek) ikinji gezek işledilýär. PredicateIki obýekt deň bolsa, hakykata gaýdyp gelýän interfeýsi durmuşa geçireliň :
class SamplePredicate< T> implements Predicate< T>{
  T varc1;
  public boolean test(T varc){
     if(varc1.equals(varc)){
       return true;
  }
  return false;
  }
}
StringBaşga bir synpda, “ArrayList” -i we synpymyzyň ýerine ýetirýän obýektini döredeliň Predicate:
ArrayList< String> color_list = new ArrayList<> ();
SamplePredicate< String> filter = new SamplePredicate<> ();
Üýtgeýjä varc1"Ak" bahasyny ýazalyň:
filter.varc1 = "White";
Sanawa birnäçe setir goşalyň:
color_list.add("White");
color_list.add("Black");
color_list.add("Red");
color_list.add("White");
color_list.add("Yellow");
color_list.add("White");
Geliň, sanawdaky usuly ýerine ýetireliň removeIf, obýektimizi şert bilen geçireris:
color_list.removeIf(filter);
Netijede, "ak" bahasy bolan ähli hatarlar sanawdan aýrylar, sebäbi "çaklaýjy" olary deňlik bilen deňeşdirýär. Jemleýji sanaw: [Gara, Gyzyl, Sary].
Подробный разбор класса ArrayList [Часть 1] - 13
Elementleri çalyşmak
public E set(int index, E element)
Görkezilen ýerdäki elementi indexgeçen biri bilen çalyşýar element. Indeks hem noldan uly bolmaly we soňky elementiň görkezijisinden pes bolmaly, ýogsam kadadan çykma bolar IndexOutOfBoundsException. Içerki massiwiň nusgalary ýok. Plyönekeý görkezilen indeksdäki elementiň ýerine täze element goýulýar, ýagny. bahasynyň üstünden ýazyň.
Подробный разбор класса ArrayList [Часть 1] - 14
public void replaceAll(UnaryOperator<e> operator)
Theygyndynyň ähli elementlerini üýtgedýär (şert bilen mümkin). Köplenç lambdalar ýa-da näbelli synplar bilen bilelikde ulanylýar (ýöne aýdyňlygy üçin, mysal üçin interfeýsi amala aşyrýan UnaryOperatorwe usullaryny kesgitleýän synpy ulanarys). Interfeýsi durmuşa geçireliň:
class MyOperator< T> implements UnaryOperator< T>{
   T varc1;
   public T apply(T varc){
     return varc1;
  }
}
StringBaşga bir synpda, “ArrayList” -i we synpymyzyň ýerine ýetirýän obýektini döredeliň UnaryOperator:
ArrayList< String> color_list = new ArrayList<> ();
MyOperator< String> operator = new MyOperator<> ();
Üýtgeýjä varc1"Ak" bahasyny ýazalyň:
operator.varc1 = "White";
Sanawa birnäçe setir goşalyň:
color_list.add("White");
color_list.add("Black");
color_list.add("Red");
color_list.add("White");
color_list.add("Yellow");
color_list.add("White");
Geliň, sanawymyzda replaceAllobýektimizi berjek usuly ýerine ýetireliň operator:
color_list.replaceAll(operator);
Netijede sanawdaky ähli bahalar “Ak” bilen çalşyryldy: [Ak, Ak, Ak, Ak, Ak, Ak]. Ine, mysal üçin, kolleksiýadaky setirlerden ähli boşluklary aýyryp bilersiňiz:
ArrayList< String> list = new ArrayList<>(Arrays.asList("A   ", "  B  ", "C"));
list.replaceAll(String::trim);
Beýleki usullar: ArrayList sanaw sanawyny usuly ulanyp, yzygiderli massiwde öwrüp bilersiňiz:
public Object[] toArray()
ýa-da
public < T> T[] toArray(T[] a)
- ine, yzyna gaýdyp gelen massiwiň görnüşi runtime şu usulda kesgitlener:
  1. käbir amallary çaltlaşdyrmak;
  2. kolleksiýany gönüden-göni kabul etmek üçin ýüklenmedik usula parametr hökmünde bir massiw geçiriň;
  3. Kolleksiýalary tanamaýan miras kody bilen täze kolleksiýa esasly kody birleşdirmek.
Toplumyň göçürme obýektini gaýtaryň:
public Object clone()
Usulyň clone()Obýektiň görnüşini yzyna berýändigini ýadyňyzdan çykarmaň, şonuň üçin jaň edeniňizden soň zerur klasa oklamaly bolarsyňyz. Klonirlemek täze garaşsyz obýekt döredýär. Kolleksiýany obýektiň bardygyny barlaň:
public boolean contains(Object o)
Sanawda bir obýektiň bardygyny barlamak (Obýekt synpynyň deň usuly bilen içerde ulanylýar, ýagny salgylanmalary deňeşdirýär), netijä baglylykda hakyky / ýalňyş görkezýär. Adaty aýlawlardan başga-da, kolleksiýany ulanyp gaýtalap bilersiňiz (her elemente girip bilersiňiz, şeýle hem käbir çäreleri ýerine ýetirip bilersiňiz):
public void forEach(Consumer< ? super E> action)
Sanawymyzy şeýle görkezip bileris:
List< Integer> numbers = new ArrayList<>(Arrays.asList(10, 20, 50, 100, -5));
numbers.forEach((number)-> System.out.println(number));
Lambdalary ulanman, anonim synpy ulanmaly we acceptinterfeýs usulyny ýok etmeli Consumer:
numbers.forEach(new Consumer< Integer>() {
  @Override
   public void accept(Integer integer) {
      System.out.println(integer);
          }
});
Indeksine görä bir element alyň:
public E get(int index)
Kolleksiýa elementlerine tötänleýin girmek üçin ulanylýar. Görkezilen indeksde sanawda ýerleşýän elementi görkezýär. Sanawdaky elementleriň iň köp mukdary bolsa index < 0ýa-da bolsa , kadadan çykma bolar . Bu elementi sanawdan almagyň esasy usulydyr we belli bir massiw öýjügine girýändigi sebäpli, ArrayList-iň ululygyna garamazdan bir elementi indeks boýunça almagyň wagty hemişe birmeňzeş bolar. Görkezilen obýektler üçin indeksleri tapmak: index >=IndexOutOfBoundsException
public int indexOf(Object o);
public int lastIndexOf(Object o);
Usullar sanawdaky birinji (berlen obýekt ilkinji gezek ýüze çykanda) ýa-da soňky gezek (berlen obýekt iň soňky gezek ýüze çykanda) görkezijini görkezýär. Sanawda element ýok bolsa, usullar -1 gaýdyp geler.
Подробный разбор класса ArrayList [Часть 1] - 16
Подробный разбор класса ArrayList [Часть 1] - 17
Toplumy elementler üçin barlaň:
public boolean isEmpty();
Usul sanaw boş bolsa (meýdanyň deňdigini ýa-da ýokdugyny görmek üçin size 0) dogry bolýar, ýogsam ýalňyş. Sanawda diňe null elementler bar bolsa, usul ýalňyş gaýdyp geler. Başgaça aýdylanda, bu usul bilen null elementler hem göz öňünde tutulýar. Sanawdaky elementleriň sanyny biliň:
public int size();
Sanawdaky elementleriň sanyny (ölçeg meýdan bahalary) görkezýär. Elementleriň sany sanawyň kuwwatyndan (kuwwatyndan) tapawutlanyp biler. Sanaw üçin iterator alyň:
public Iterator< E> iterator();
Soňra aýlawda ýa-da başga bir gaýtadan işlemekde sanaw üçin iterator görkezýär. Iterator şowsuz hereketleri amala aşyrýar. Collectionygyndynyň içinden geçip, oňa käbir üýtgeşmeleri duýsa (iterator usullary bilen alynmady), derrew kadadan çykma çykarýar ConcurrentModificationException. Iteratoryň bir zady bar modification count. Haçan-da iterator kolleksiýanyň üsti bilen gaýtalansa next/hasNext/remove, bu hasaplaýjyny barlaýar. Eger iteratoryň görmegine garaşýan bolsa, bu kadadan çykma döredýär. Bu ýerde iteratorlary jikme-jik göz öňünde tutmaýaryn.
public ListIterator< E> listIterator() и public ListIterator< E> listIterator(int index)
Soňra aýlawda ýa-da başga bir gaýtadan işlemekde sanaw üçin sanaw iteratoryny görkezýär. Interfeýs sanawyň iki taraplaýyn geçmegi we elementleriniň üýtgemegi üçin ListIteratorinterfeýsi giňeldýär . IteratorArtykmaç wersiýada “gezelenç” başlajak indeksden geçip bilersiňiz. Bu ýagdaýda indeks, usulyň işe başlajak ilkinji elementini aňladýar next()we usul diýlende, previous()geçiş “geçen indeks - 1” indeksiniň aşagyndaky elementden başlar.
public Spliterator <E> spliterator()
Java 8, çäklendiriji iterator diýlip atlandyrylýan giç baglaýjy we şowsuz çalt iteratoryň täze görnüşini hödürleýär. Aýryjy iteratorlar elementleriň yzygiderliligini gaýtalamaga mümkinçilik berýär, ýöne olar başgaça ulanylýar. “Spliterator” interfeýsiniň iň möhüm aýratynlygy, elementleriň yzygiderliliginiň aýry bölekleriniň paralel gaýtalanmagyny we şonuň üçin paralel programmirlemegi goldamak ukybydyr.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION