Pangkalahatang ideya ng balangkas ng koleksyon ng java

Overview Java Collection Framework



Karaniwan, kailangang malaman ng aming programa kung gaano karaming mga bagay ang malilikha alinsunod sa oras ng pagpapatakbo ng programa. Ngunit kung hindi para sa programa na tumakbo, sa yugto ng pagbuo ng programa, hindi namin alam kung gaano karaming mga bagay ang kinakailangan, o kahit na ang eksaktong uri nito. Upang matugunan ang mga maginoo na pangangailangan ng programa, hinihiling namin na ang anumang bilang ng mga bagay ay maaaring malikha sa anumang oras at saanman, at ano ang dapat gamitin upang mapaunlakan ang mga bagay na ito? Una naming naisip ang mga array, ngunit ang mga pag-array ay maaari lamang magkaroon ng magkakatulad na mga uri ng data, at naayos ang kanilang haba, kaya ano ang dapat nating gawin? Nagsimula ang koleksyon!

Isa, diagram ng balangkas ng koleksyon ng java

imahe



Ang pinasimple na diagram ay ipinapakita sa ibaba



imahe



Kabilang sa mga ito, Listahan, Itakda, at Mapa ay maaaring ituring bilang ang tatlong pangunahing mga kategorya ng mga koleksyon. Parehong Listahan at Itakda ang magmamana mula sa interface ng Koleksyon. Ipinatupad ang interface ng koleksyon Iterator Interface, ito ay isang interface na ginamit upang daanan ang mga elemento sa koleksyon, pangunahin hashNext(), next(), remove() tatlong pamamaraan. Isang subinterface ListIterator Tatlong pamamaraan ang naidagdag dito, katulad add(), previous(), hasPrevious(). Kung ipatupad mo ang interface ng Iterator, kapag nadaanan mo ang mga elemento sa koleksyon, maaari ka lamang dumaan pabalik. Ang mga nadaanan na elemento ay hindi na muling dadaanan. Karaniwan, ang hindi naayos na mga koleksyon ay nagpapatupad ng interface na ito, tulad ng HashSet at ang mga elementong iyon ay Nag-order ng mga koleksyon sa pangkalahatan ay ipinatupad ang interface ng LinkedIterator. Ang isang koleksyon na nagpapatupad sa interface na ito ay maaaring dumaan sa parehong direksyon. Maaari mong ma-access ang susunod na elemento sa pamamagitan ng susunod () at ang dating elemento sa pamamagitan ng nakaraang (), tulad ng ArrayList.

Ang Listahan ng Java ay isang karaniwang ginagamit na uri ng data. Ang listahan ay isang order na Koleksyon. Mayroong tatlong mga klase sa pagpapatupad para sa Listahan: ArrayList, Vector at LinkedList ayon sa pagkakabanggit.

Ang lahat ng mga klase sa koleksyon ay matatagpuan sa java.util package. Ang mga klase sa koleksyon ng java ay higit sa lahat nagmula sa dalawang interface ng Koleksyon at Mapa.



Dalawa, interface ng Iterator

Ang interface ng Iterator ay miyembro din ng balangkas ng koleksyon ng Java, ngunit hindi ito katulad ng serye ng Koleksyon at mga koleksyon ng serye ng Mapa: Ang mga koleksyon ng serye ng koleksyon at mga koleksyon ng serye ng Map ay pangunahing ginagamit upang hawakan ang iba pang mga bagay, habang ang Iterator ay pangunahing ginagamit upang daanan (ie pagbisita nang paulit-ulit) Mga koleksyon ng koleksyon Ang mga elemento sa bagay na Iterator ay tinatawag ding mga iterator.

Ang sumusunod na 4 na pamamaraan ay tinukoy sa interface ng Iterator:

boolean hasNext(): Ibinabalik totoo kung ang mga elemento sa iteradong koleksyon ay hindi pa naipataw.

Object next(): Ibalik ang susunod na elemento sa hanay.

void remove() : Tanggalin ang sangkap na ibinalik ng nakaraang susunod na pamamaraan sa koleksyon

void forEachRemaining(Consumer action), Ito ang default na pamamaraan na idinagdag ng Java 8 para sa Iterator, na maaaring gumamit ng mga expression ng Lambda upang daanan ang mga elemento ng koleksyon.

Gumamit ng Iterator upang ulitin ang mga elemento sa koleksyon:

public class IteratorDemo { public static void main(String[] args) { Collection<String> coll = new ArrayList<String>() coll.add('Zhang San') coll.add('Li Si') coll.add('Wing Five') Iterator<String> it = coll.iterator() while(it.hasNext()){ //Determine whether there is an iterated element String s = it.next()//Get the iterated element System.out.println(s) } } }

Tandaan: Kapag nag-aalis ng mga elemento ng koleksyon, kung wala nang mga elemento sa koleksyon, at patuloy kang gumagamit ng susunod na pamamaraan ng iterator, isang error na java.util.NoSuchElementException na walang elemento ng koleksyon ang magaganap.

Prinsipyo ng pagsasakatuparan

Kapag binabagtas ang koleksyon, kunin muna ang bagay na iterator sa pamamagitan ng pagtawag sa iterator () na pamamaraan ng t koleksyon, at pagkatapos ay gamitin ang hashNext () na pamamaraan upang matukoy kung mayroong susunod na elemento sa koleksyon, kung mayroon ito, tawagan ang susunod ( ) paraan upang mailabas ang elemento, kung hindi man ay ipaliwanag Ang katapusan ng koleksyon ay naabot na, ihinto ang pagdaan sa mga elemento.

Kapag ang bagay ng Iterator ay dumaan sa koleksyon, gumagamit ito ng mga pahiwatig sa loob upang subaybayan ang mga elemento sa koleksyon.

Bago tawagan ang susunod na pamamaraan ng Iterator, ang index ng iterator ay matatagpuan bago ang unang elemento at hindi tumuturo sa anumang elemento. Kapag ang susunod na pamamaraan ng iterator ay tinawag sa kauna-unahang pagkakataon, ang index ng iterator ay lilipat ng kaunti at ituro sa unang Elemento at ibabalik ang elemento. Kapag ang susunod na pamamaraan ay tinawag ulit, ang index ng iterator ay magtuturo sa pangalawang elemento at ibabalik ang elemento, at iba pa, hanggang sa ang pamamaraan ng hasNext ay bumalik na hindi totoo, na nagpapahiwatig na naabot ang pagtatapos ng koleksyon, at natapos ang pares Traversal ng mga elemento.

Tatlo, interface ng Koleksyon

Tinutukoy ng interface ng Koleksyon ang maraming mga pamamaraan upang gumana sa mga elemento, kung saan ang mas karaniwang ginagamit ay:

boolean add(E e) : Idagdag ang ibinigay na bagay sa kasalukuyang koleksyon.

void clear() : I-clear ang lahat ng mga elemento sa koleksyon.

boolean remove(E e) : Tanggalin ang ibinigay na bagay sa kasalukuyang koleksyon.

boolean contains(E e) : Tukuyin kung ang ibinigay na bagay ay kasama sa kasalukuyang koleksyon.

boolean isEmpty() : Tukuyin kung ang kasalukuyang koleksyon ay walang laman.

int size() : Ibinabalik ang bilang ng mga elemento sa koleksyon.

Object[] toArray() : Itabi ang mga elemento sa koleksyon sa isang array.

Apat, Listahan at Itakda

Ang Lista at Itakda ay dalawang karaniwang ginagamit na mga sub-interface ng interface ng Koleksyon

Listahan

Ang koleksyon ng Listahan ay kumakatawan sa isang order na koleksyon. Ang bawat elemento sa koleksyon ay may kaukulang sunud-sunod na index, at pinapayagan ang mga duplicate na elemento, at ang mga elemento sa tinukoy na posisyon ay maaaring ma-access sa pamamagitan ng index. Ang listahan ay may tatlong klase sa pagpapatupad: ArrayList, Vector at LinkedList ayon sa pagkakabanggit.

Mga karaniwang pamamaraan:

public void add(int index, E element) : Idagdag ang tinukoy na elemento sa tinukoy na posisyon sa koleksyon.

public E get(int index) : Ibinabalik ang elemento sa tinukoy na posisyon sa koleksyon.

public E remove(int index) : Alisin ang elemento sa tinukoy na posisyon sa listahan, at ibalik ang tinanggal na elemento.

public E set(int index, E element) : Palitan ang elemento sa tinukoy na posisyon sa koleksyon ng tinukoy na elemento, at ibalik ang elemento bago ang pag-update ng halaga.

Itakda

Itinakda ng pansin ng set ang natatanging kalikasan. Ginagamit ang set ng system upang mag-imbak ng mga hindi nababagabag na elemento (ang pagkakasunud-sunod ng deposito at pag-atras ay hindi kinakailangan pareho), at ang halaga ay hindi maaaring ulitin. Ang kakanyahan ng pagkakapantay-pantay ng mga bagay ay ang halaga ng hashCode ng object (ang java ay batay sa memorya ng object ng bagay upang makalkula ang serial number). Kung nais mo ang dalawang magkakaibang mga bagay na maituring na pantay, dapat mong i-override ang pamamaraan ng hashCode ng Bagay at katumbas na pamamaraan.

Karaniwang mga subclass ng Set ay:

  • HashSet
  • LinkedHashSet
  • TreeSet

Ang pagkakaiba sa pagitan ng Itakda at Listahan

  • Ang halimbawa ng Set interface ay nag-iimbak ng out-of-order, hindi paulit-ulit na data. Ang Listahan ng mga halimbawa ng tindahan ng mga tindahan ay nag-order, mga nauulit na elemento.
  • Itakda ang kahusayan sa pagkuha ay mababa, ang pagtanggal at ang kahusayan ng pagpapasok ay mataas, ang pagpapasok at pagtanggal ay hindi magiging sanhi ng pagbabago ng posisyon ng elemento。
  • Ang listahan ay katulad ng array, na maaaring lumago nang pabagu-bago at awtomatikong palaguin ang haba ng Listahan ayon sa haba ng data na talagang naimbak. Mahusay ang paghanap ng mga elemento, hindi mahusay ang pagpasok at pagtanggal, sapagkat ito ay magiging sanhi ng pagbabago ng ibang mga posisyon sa elemento。

5 、 Mapa

Ginagamit ang mapa upang makatipid ng data sa mga pakikipag-ugnay sa pagmamapa (key-vlaue). Ang mga susi ng Mapa ay hindi pinapayagan na ulitin, iyon ay, ang anumang dalawang mga susi ng parehong bagay ng Mapa ay palaging babalik mali kung ihahambing sa pamamagitan ng katumbas na pamamaraan.

Maraming mga pamamaraan ang tinukoy sa interface ng Mapa, ang mga karaniwang ginagamit ay ang mga sumusunod:

  • public V put(K key, V value) : Idagdag ang tinukoy na key at tinukoy na halaga sa koleksyon ng Mapa.

  • public V remove(Object key) : Tanggalin ang elemento ng pares ng key-halaga na naaayon sa tinukoy na key mula sa koleksyon ng Mapa at ibalik ang halaga ng tinanggal na elemento.

  • public V get(Object key) Ayon sa tinukoy na susi, kunin ang katumbas na halaga sa koleksyon ng Mapa.

  • public Set keySet() : Kunin ang lahat ng mga susi sa koleksyon ng Mapa at iimbak ang mga ito sa koleksyon ng Itakda.

  • public Set entrySet() : Kunin ang koleksyon (Itakda ang koleksyon) ng lahat ng mga key-halaga na pares na bagay sa koleksyon ng Mapa.

tala:

  1. Ang koleksyon ng Mapa ay hindi maaaring direktang daanan gamit ang mga iterator o unahan. Ngunit maaari itong magamit pagkatapos mag-convert sa Itakda

  2. Hindi minana ng mapa ang interface ng Koleksyon

  3. Nagbibigay ang mapa ng susi sa pagmamapa ng halaga. Ang isang Mapa ay hindi maaaring maglaman ng parehong key, at ang bawat key ay maaari lamang i-map ang isang halaga.