JavaRush /Java Blog /Random-TK /Java-da dinamiki massiwler

Java-da dinamiki massiwler

Toparda çap edildi
Dürli çylşyrymlylyk programmalary döredilende, her bir dörediji köp sanly maglumat görnüşini ulanýar, şol sanda massiwler. Bu gurluş bir görnüşiň toplumyny saklamak üçin örän amatly, ajaýyp öndürijiligi üpjün edýär we umuman amatly. Java-da dinamiki massiwler - 1Toplumlaryň ep-esli kemçiligi, olaryň statik bolmagydyr: ululyklary öňünden görkezilmelidir. Şeýle-de bolsa, programmistler geljegi nädip çaklamalydygyny bilenoklar (elbetde, maglumaty gaty çalt işlejek we islendik hadysany çaklap bilýän AI peýda bolmasa). Şol sebäpli programma işleýän wagtynda ululygyny üýtgedip biljek bir gurluş döretdik. Oňa dinamiki massiw diýilýär .

JavaRush kursynda dinamiki massiwler

Bu mowzuk 7-nji derejede we Java Sintaksis gözleginde JavaRush kursynyň 8-nji derejesinde gaty düşnükli we düşnükli . Birnäçe leksiýanyň dowamynda we 18-e golaý meselede esasy meseleler, dinamiki massiwleriň görnüşleri we ýerine ýetiriş ýaly olaryň arasyndaky tapawut bar. Bu mowzuk diýseň möhüm, sebäbi dinamiki massiwler döredijini depressiýadan, kelleagyrydan halas edýär we ajaýyp wagt tygşytlaýar.

Dinamiki massiw näme?

Dinamiki massiw, programma ýerine ýetirilende ululygyny üýtgedip biljek massiwdir. Java-da bu rol esasan ArrayList we LinkedList synplary tarapyndan ýerine ýetirilýär. ArrayList we LinkedList massiwlerden tapawutlylykda diňe maglumat maglumat görnüşlerini öz içine alýar, ýagny diňe obýektleri saklap bilýär. Bagtymyza, Java-da başlangyç görnüşleri dinamiki massiwlerde saklamaga mümkinçilik berýän awtoboks we awtoboks boks mehanizmleri bar. Statik massiw ýaly, dinamiki massiw birmeňzeş, ýagny bir maglumat görnüşini saklap bilýär. Şeýle-de bolsa, miras mehanizminiň we interfeýsleriň dogry ulanylmagynyň netijesinde bir dinamiki massiwde bir umumy synpdan miras galan dürli synplaryň tutuş toplumyny saklamak bolýar, ýöne aşakda has köp. .Agny, statiki massiw şeýle işleýär: Java-da dinamiki massiwler - 2Java -da dinamiki massiw aşakdaky ýaly işlär (diagrammany üçünji ädimden dowam etdirýär): Java bir massiw göçürmek üçin ýörite ýerliJava-da dinamiki massiwler - 3 funksiýany ulanýar , şonuň üçin beýle “hereket” kän däl gymmat.

Näme üçin dinamiki massiw gerek?

Java-da dinamiki massiw, programma ýazylan wagty ululygy belli bolmadyk birmeňzeş maglumatlar toplumyny gaýtadan işlemek üçin ulanylýar. Mysal üçin, häzirki wagtda programmany ulanýan her bir müşderiniň maglumatlaryny keş görnüşinde saklap bilersiňiz. Şeýle müşderileriň sanyny öňünden çaklamak mümkin däl. Dinamiki massiwler bolmasa bu meseläni aşakdaky wariantlar bilen çözüp bolar:
  1. Zerurlygy ödemek üçin 100% ähtimal uly massiw dörediň;
  2. Bufer hökmünde hereket etjek statiki massiw dörediň;
  3. Toplum ýaly beýleki dinamiki gurluşlary ulanyň.
Birinji wariant diňe çäkli aralykda bolan ýagdaýynda amatlydyr. Beýleki ýagdaýlarda, şeýle massiw gaty köp ýat ýerini alar, bu gaty netijesiz. Ikinjisi, bufer arassalamak, okamak we ş.m. üçin goşmaça mehanikleriň ýerine ýetirilmegini talap eder. Üçünjisiniň hem işleýşindäki tapawutlar sebäpli kemçilikleri bar.

Java-da dinamiki massiw näme edýär?

Java dilinde ArrayList we LinkedList synplary dinamiki massiw hökmünde çykyş edýär. Iň köp ulanylýan “ArrayList”, sebäbi goşa baglanyşyk sanawy düşünjesini durmuşa geçirýän “LinkedList” -den tapawutlylykda, nusgawy massiw hökmünde çykyş edýär. Bu barada azajyk soň gürleşeris.

ArrayList, LinkedList - düşünjeler we iş düzgünleri

“ArrayList” - bu programma ýerine ýetirilende giňeldilip bilinýän nusgawy massiw. Ol yzygiderli massiwde esaslanýar: döredilende ululygy 10 elementdir. Ululygy ulaldygyça kuwwat artýar. ArrayList-iň işleýän düzgünleri:
  • Statik massiw ýaly, 0-dan indekslenýär;
  • Ahyrynda goýmak we indeks boýunça giriş gaty çalt - O (1);
  • Bir elementiň başynda ýa-da ortasynda goýmak üçin, ähli elementleri bir öýjügiň sag tarapyna göçürmeli we täze elementi gerekli ýere goýmaly bolarsyňyz;
  • Bahasy boýunça giriş elementleriň sanyna bagly - O (n);
  • Klassiki massiwden tapawutlylykda, null saklap bilýär;
“LinkedList” meselesinde hemme zat birneme çylşyrymly: goşa baglanyşyk sanawyna esaslanýar. Structagny, gurluş taýdan bu dinamiki Java massiwi, biri-birine salgylanýan birnäçe dargadylan zatlar. Suratlar bilen düşündirmek has aňsat. Head“LinkedList” -iň içinde elementleriň sany barada maglumatlary, şeýle hem birinji we soňky elementlere baglanyşyk saklaýan esasy obýektimiz bar : Java-da dinamiki massiwler - 4Indi meýdan size = 0, firstwe last = null. Bu sanawa goşulan her bir element aýratyn içerki obýektiň mazmunydyr. Bir element goşalyň Johnny: Java-da dinamiki massiwler - 5Indi bizde “Johnny” bahasy bolan düwün bar. Esasy element üçin birinji we soňky elemente baglanyşyklar täze düwün görkezýär. Bu obýektiň öňki we indiki elementlere hem baglanyşygy bar. Öňküsi bilen baglanyşyk elmydama puja çykar, sebäbi bu birinji element, indiki birine baglanyşyk bolsa hemişe ýok bolar, sebäbi entek ýok. Muny düzedeliň: Java-da dinamiki massiwler - 6Ikinjisi bolan “Watson” bahasy bilen täze element goşdy. nextBirinji elementiň indiki elementi görkezýän meýdany , täze elementiň previousbolsa öňki elementini görkezýän meýdany bar. Esasy element üçin soňky elemente baglanyşyk täze düwün görkezýär. Aşakdaky diagramma sanawyň ortasyna elementleri nädip goşmalydygyny görkezýär: Java-da dinamiki massiwler - 7“Hamiş” täze element goşuldy. Sanawyň ortasyna girizmek üçin, suratda görkezilişi ýaly elementlere baglanyşyklary täzeden belläň. Bu suratlar, jikme-jik maglumat bermezden, ýokarky derejede iki gezek baglanyşdyrylan sanawyň işini düşündirýär. LinkedList hakda hekaýany jemlemek üçin, onuň işlemegi üçin birnäçe düzgün alyp bileris:
  • Edil massiw ýaly, 0-dan indekslenýär;
  • Birinji we soňky elemente girmek elementleriň sanyna bagly däl - O (1);
  • Indeks boýunça element almak, sanawyň ortasyndan goýmak ýa-da pozmak elementleriň sanyna bagly - O (n);
  • Iterator mehanizmini ulanyp bilersiňiz: soň goýmak we öçürmek hemişe bolar;
  • Klassiki massiwden tapawutlylykda, null saklap bilýär.

Kod mysallary

Geliň, käbir mysallara geçeliň. Kod parçalarynda ArrayList we LinkedList üçin mysallar bar.

Ationaradylyş

// Создаем новый список
ArrayList<String> arrayList = new ArrayList<>();
// Создается новый список и указывается начальный размер внутреннего массива
ArrayList<String> arrayListLarge = new ArrayList<>(100000);

// Создаем новый LinkedList
LinkedList<String> linkedList = new LinkedList<>();

Bir element goşmak

// Новый элемент добавляется в конец
arrayList.add("Johhny");
// Новый элемент добавляется в указанную позицию (в данном случае — в начало)
arrayList.add(0, "Watson");

// Новый элемент добавляется в конец двусвязного списка
linkedList.add("Java");
// Новый элемент добавляется в нулевую позицию списка:
linkedList.addFirst("I think");
// Новый элемент добавляется в конец списка
linkedList.addLast("language");
// Новый элемент добавляется в указанную позицию
linkedList.add(2, "is a terrific");

// Получение размера списков
int arraySize = arrayList.size(); // 2
int linkedSize = linkedList.size(); // 4
Bir seretseň, add()AND usullary addLast()birmeňzeş işleýär, ýöne usul add()LinkedList-e interfeýsden geldi Listwe usul addLastinterfeýsden geldi Deque. LinkedList bu interfeýsleriň ikisini hem amala aşyrýar. Bu ýagdaýda gowy tejribe kontekst üçin iň laýyk usuly ulanmak bolar. “LinkedList” nobat hökmünde ulanylsa, iň gowusy ony ulanmak addLast. “LinkedList” sanaw hökmünde ulanylsa, ulanmak ýerlikli bolardy add().

Bir elementi aýyrmak

// Удаление element по индексу
arrayList.remove(0);
// Удаление element по значению
arrayList.remove("Johnny");

// Удаление первого element в списке
linkedList.removeFirst();
// Удаление первого element в списке, фактически вызов предыдущего метода
linkedList.remove();
// Удаление последнего element в списке
linkedList.removeLast();
// Удаление первого вхождения element в список
linkedList.removeFirstOccurrence("language");
// Удаление последнего вхождения element в список
linkedList.removeLastOccurrence("Java");
// Удаление по индексу
linkedList.remove(2);
Bir obýekt indeks bilen öçürilen bolsa, usul öçürilen obýekti yzyna gaýtaryp berýär. Eger bir obýekt gymmaty bilen öçürilen bolsa (ýa-da LinkedList-iň birinji ýa-da soňky elementleri öçürilse), obýekt tapylsa we ýok edilse, usul ýalňyş bolar .

Bir elemente girmek we sanawy gözlemek

// Доступ к элементу по индексу
String arrayElement = arrayList.get(2);
// Поиск element по значению
int arrayIndex = arrayList.indexOf("Watson");
// Поиск последнего индекса вхождения element в список
int lastArrayIndex = arrayList.lastIndexOf("Watson");

// Доступ по индексу
String linkedElement = linkedList.get(3);
// Получение первого element
String firstLinkedElement = linkedList.getFirst();
// Получение последнего element
String lastLinkedElement = linkedList.getLast();

// Поиск element по значению
int linkedIndex = linkedList.indexOf("Java");
// Поиск последнего индекса вхождения element в список
int lastLinkedIndex = linkedList.lastIndexOf("Java");

Aýlawda ýöremek

// Использование обычного цикла
for(int i = 0; i<arrayList.size(); i++) {
  String value = arrayList.get(i);
  System.out.println(value);
}

for(int i = 0; i<linkedList.size(); i++) {
  String value = linkedList.get(i);
  System.out.println(value);
}

// Использование цикла for-each
for(String s : arrayList) {
  System.out.println(s);
}

for(String s : linkedList) {
  System.out.println(s);
}
Bu ýerde gözleg hakda birnäçe söz aýtmaly. Köp sanly täze döredijiler, sanawdaky bir element gözlänlerinde, usullaryň bardygyna garamazdan, ähli elementleri gözlenýän element bilen deňeşdirip, aýlawda indexOf()başlaýarlar lastIndexOf(). contains()Şeýle hem , sanawda bir elementiň bardygyny bilmek üçin usuly ulanyp bilersiňiz :
boolean isContainsSherlock = arrayList.contains("Sherlock");
boolean isContainsPhp = linkedList.contains("Php");

Goşmaça okamak üçin baglanyşyklar

  1. Bu ýerde “ArrayList” -den elementleri aýyrmak barada ajaýyp makala bar . Munuň dinamiki Java massiwidigi sebäpli elementleri aýyrmakda köp inçelikler bar.
  2. “ArrayList” -iň işleri bu ýerde jikme-jik görkezilýär .
  3. LinkedList hakda azajyk giňişleýin .
  4. Habrdan ArrayList we LinkedList hakda birnäçe makala .
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION