1. Бписок ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ

Как Ρ‚Ρ‹ моТСшь ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Π² Java Π΅ΡΡ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ инструмСнт для хранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² – ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ основныС интСрфСйсы ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ:

List, Set, Map ΠΈ Queue.

Как водится, Π½Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΈΠ»ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… инструмСнтов, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΏΠΎ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ. А для этого ΠΌΡ‹ с Ρ‚ΠΎΠ±ΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π½ΡŒΠΊΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² ΠΈΡ… особСнностях, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΈ ΠΊΠ°ΠΊΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

1. List

Π”Π°Π²Π°ΠΉ Π½Π°Ρ‡Π½Π΅ΠΌ с самой часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ.

List максимально схоТ с самым ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ массивом. НазваниС ΠΆΠ΅ Π½Π°ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это список (list).

Π­Ρ‚Π° коллСкция Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² сСбС список ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π½Π΅ Π·Π°Π±ΠΎΡ‚ΡΡΡŒ ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ самой ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ ΠΌΡ‹ это Π΄Π΅Π»Π°Π»ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ массивы. ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ элСмСнтам ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ происходит ΠΏΠΎ индСксу. Если ΠΌΡ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Π΅ΠΌ, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ мСстС находится ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ часто ΠΊ Π½Π΅ΠΌΡƒ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ, ΠΏΡ€ΠΈ этом Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ часто Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ элСмСнты, List β€” это ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.

2. Set

Set (мноТСство) ΠΈΠΌΠ΅Π΅Ρ‚ совсСм Π΄Ρ€ΡƒΠ³ΡƒΡŽ структуру.

Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Set стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Допустим, это Π½Π°Π±ΠΎΡ€ Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΡ€ ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½. Но ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ просто Ρ‚Π°ΠΊ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ Π½Π°Π±ΠΎΡ€Ρƒ Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŒ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΡ€Π°. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Set-Π° Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ быстро ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, прСдставлСн Π»ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Π°Π²Ρ‚ΠΎΡ€ Π² нашСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Set. Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΏΠΎ всСй ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту, Π½ΠΎ это Π½Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ.

Π’ΠΎ Π΅ΡΡ‚ΡŒ, Π² нашСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Set ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ Π½Π°Π±ΠΎΡ€Π° всСх Π°Π²Ρ‚ΠΎΡ€ΠΎΠ², для быстрой ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, прСдставлСн Π»ΠΈ этот Π°Π²Ρ‚ΠΎΡ€ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅.

3. Map

Map (ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ) большС ΠΏΠΎΡ…ΠΎΠΆΠ° Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΎΡ‚Π΅ΠΊΡƒ, Π³Π΄Π΅ каТдая ячСйка подписана, ΠΈ Π² Π½Π΅ΠΉ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρ‚Π°ΠΊ ΠΈ Ρ†Π΅Π»Ρ‹Π΅ структуры. Map стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² случаях, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ соотвСтствиС ΠΎΠ΄Π½ΠΎΠ³ΠΎ значСния ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ.

Π’ Map это называСтся соотвСтствиС ΠΊΠ»ΡŽΡ‡ – Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π‘ Ρ‚Π°ΠΊΠΎΠΉ структурой Π² нашСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠΌΡ‹ смоТСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π°Π²Ρ‚ΠΎΡ€Π° ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡, Π° список (List) ΠΊΠ½ΠΈΠ³ ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ² Π² Set Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π°Π²Ρ‚ΠΎΡ€Π° Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, ΠΌΡ‹ смоТСм ΠΏΠΎ этому ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ Π°Π²Ρ‚ΠΎΡ€Π° Π΄ΠΎΡΡ‚Π°Ρ‚ΡŒ List с Π΅Π³ΠΎ ΠΊΠ½ΠΈΠ³Π°ΠΌΠΈ ΠΈΠ· Map.

4. Queue

Queue (ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ) – прСдставляСт собой ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ, которая построСна ΠΊΠ°ΠΊ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ эта ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ LIFO (Last In First Out – послСдний зашСл, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅Π»), Π½ΠΎ ΠΈ FIFO (First In First Out – ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ зашСй, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅Π»). А Π΅Ρ‰Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ двунаправлСнная, с Π²Ρ‹Ρ…ΠΎΠ΄Π°ΠΌΠΈ с ΠΎΠ±ΠΎΠΈΡ… сторон.

Π­Ρ‚ΠΎΡ‚ инструмСнт ΡƒΠ΄ΠΎΠ±Π΅Π½ Π² случаях, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠ΅ Π² наш класс, ΠΌΠ΅Ρ‚ΠΎΠ΄, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² порядкС ΠΈΡ… поступлСния. НапримСр, Π² нашСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ вновь ΠΏΡ€ΠΈΠ±Ρ‹Π²ΡˆΠΈΡ… посСтитСлСй Π² Queue ΠΈ ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈΡ… ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ, выдавая ΠΊΠ½ΠΈΠ³ΠΈ, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΎΠ½ΠΈ ΠΊ Π½Π°ΠΌ приходят.

Как ΠΌΡ‹ с Ρ‚ΠΎΠ±ΠΎΠΉ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, всС структуры Ρ…ΠΎΡ€ΠΎΡˆΠΈ, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΏΠΎ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ. И Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΌΡ‹ использовали всС Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ‚ΠΈΠΏΠ° ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ.

2. Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ

Как ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ΠΎ, ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ рассматривали Π²Ρ‹ΡˆΠ΅, это интСрфСйсы, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ Ρƒ Π½ΠΈΡ… Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΈ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π·Π°Π±ΠΈΠ²Π°Ρ‚ΡŒ Π³Π²ΠΎΠ·Π΄ΠΈ микроскопом β€” Π½Π΅ самая Π»ΡƒΡ‡ΡˆΠ°Ρ идСя, Π½Π°ΠΌ стоит Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΡƒΡŽ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ситуации.

Π§Π°Ρ‰Π΅ всСго, выбирая Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ инструмСнт, ΠΌΡ‹ смотрим Π½Π° 2 показатСля:

  • насколько этот инструмСнт ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎΠ΄ Π·Π°Π΄Π°Ρ‡Ρƒ
  • насколько быстро Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π° с Π½ΠΈΠΌ

Если с Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ подходящСго ΠΏΠΎΠ΄ Π·Π°Π΄Π°Ρ‡Ρƒ инструмСнта ΠΌΡ‹ ΠΊΠΎΠ΅-ΠΊΠ°ΠΊ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ, Ρ‚ΠΎ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ – это Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ новСнькоС.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ скорости Ρ€Π°Π±ΠΎΡ‚Ρ‹ часто Π²Ρ‹Ρ€Π°ΠΆΠ°ΡŽΡ‚ Ρ‡Π΅Ρ€Π΅Π· Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ большой Π±ΡƒΠΊΠ²ΠΎΠΉ О.

Π§Ρ‚ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ Ρ‚Π°ΠΊΠΎΠ΅ эта врСмСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ?

ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами, эта ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° врСмя ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π»ΠΎΠΆΠ΅Π½ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ для Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ дСйствия (Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта, поиск).

ArrayList vs LinkedList

Π”Π°Π²Π°ΠΉ рассмотрим это Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π΄Π²ΡƒΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ интСрфСйса List β€” ArrayList ΠΈ LinkedList.

Частично ΠΏΡ€ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ этих Π΄Π²ΡƒΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ упоминаСтся Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Π’Π½Π΅ΡˆΠ½Π΅, Ρ€Π°Π±ΠΎΡ‚Π° с этими коллСкциями ΠΏΠΎΡ…ΠΎΠΆΠ°:

List<String> arrayList = new ArrayList<>();
arrayList.add(String);
arrayList.get(index);
arrayList.remove(index);
arrayList.remove(String);

List<String> linkedList = new LinkedList<>();

linkedList.add(String);

linkedList.get(index);
linkedList.remove(index);
linkedList.remove(String);

Как Ρ‚Ρ‹ ΠΌΠΎΠ³ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Π² ΠΎΠ±ΠΎΠΈΡ… случаях ΠΌΡ‹ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ добавляСм, Π±Π΅Ρ€Π΅ΠΌ ΠΈ удаляСм элСмСнт ΠΈΠ· списка. Π­Ρ‚ΠΎ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ создаСм Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° основС ΠΎΠ΄Π½ΠΎ интСрфСйса. Но Π½Π° этом сходство Ρƒ Π½ΠΈΡ… заканчиваСтся.

Благодаря Ρ€Π°Π·Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйса List эти Π΄Π²Π΅ структуры ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π½ΡƒΡŽ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ Ρ€Π°Π·Π½ΠΎΠΌ использовании.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ удалСния ΠΈ добавлСния элСмСнта.

Если Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнт ΠΈΠ· сСрСдины списка ArrayList, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ списка, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Π·Π° элСмСнтом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ удаляСм.

Допустим, Ρƒ нас Π΅ΡΡ‚ΡŒ список ΠΈΠ· 5-Ρ‚ΠΈ элСмСнтов ΠΈ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ 3-ΠΉ.

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.remove(2);

Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС послС удалСния Ρƒ нас освободится ΠΎΠ΄Π½Π° ячСйка, ΠΈ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ 4-ΠΉ элСмСнт Π½Π° мСсто 3-Π³ΠΎ, Π° 5-ΠΉ Π½Π° мСсто 4-Π³ΠΎ.

Π­Ρ‚ΠΎ максимально нСэффСктивно.

Π’ΠΎ ΠΆΠ΅ самоС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ элСмСнта Π² сСрСдину списка.

LinkedList ΠΆΠ΅ устроСн ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнтов ΠΈΠ· Π½Π΅Π³ΠΎ происходит быстро, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π°ΠΌ всСго лишь Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ссылки Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ элСмСнтС, ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΠ² ΠΈΠ· Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ элСмСнтов ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ удаляСм.

На ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ списка ΠΈΠ· 5-Ρ‚ΠΈ элСмСнтов, ΡƒΠ΄Π°Π»ΠΈΠ² ΠΈΠ· Π½Π΅Π³ΠΎ 3-ΠΉ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ просто ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ ссылку Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт Π²ΠΎ 2-ΠΌ ΠΈ ссылку Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Π² 4-ΠΌ элСмСнтС.

Π’ΠΎ ΠΆΠ΅ самоС, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, происходит ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ элСмСнта Π² список.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, насколько мСньшС дСйствий Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ произвСсти Π² LinkedList Π² сравнСнии с ArrayList. А это всСго лишь 5 элСмСнтов. Π‘ΡƒΠ΄ΡŒ Π² спискС 100 ΠΈ большС элСмСнтов, прСвосходство LinkedList Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π±ΠΎΠ»Π΅Π΅ ΠΎΡ‰ΡƒΡ‚ΠΈΠΌΠΎ.

Но ΠΊΠ°ΠΊ помСняСтся ситуация, Ссли ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ элСмСнту ΠΏΠΎ индСксу?

Π’ΡƒΡ‚ всС Π±ΡƒΠ΄Π΅Ρ‚ Ρ€ΠΎΠ²Π½ΠΎ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

Π’Π°ΠΊ ΠΊΠ°ΠΊ ArrayList устроСн ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ массив, Π½Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ просто Π²Π·ΡΡ‚ΡŒ любой элСмСнт ΠΏΠΎ Π΅Π³ΠΎ индСксу. ΠœΡ‹ просто пСрСмСстим ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ мСсто ΠΈ возьмСм ΠΈΠ· ячСйки элСмСнт.

Но Π² LinkedList Ρ‚Π°ΠΊ просто Π½Π΅ получится. Нам придСтся ΠΏΡ€ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΏΠΎ всСм элСмСнтам массива, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ элСмСнты с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ индСксом. Волько Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΈΠΌΠ΅Π΅Ρ‚ смысл Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ это Π½Π΅ индСкс, Π° порядковый Π½ΠΎΠΌΠ΅Ρ€.

Π”Π°Π²Π°ΠΉ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ это всС Ρ‡Π΅Ρ€Π΅Π· Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ О?

НачнСм с обращСния ΠΊ элСмСнту ΠΏΠΎ индСксу.

Π’ ArrayList это происходит Π² ΠΎΠ΄Π½ΠΎ дСйствиС, Π²Π½Π΅ зависимости ΠΎΡ‚ мСстополоТСния элСмСнта Π² спискС. Π’ Π½Π°Ρ‡Π°Π»Π΅ ΠΎΠ½ ΠΈΠ»ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅.

ВрСмСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π±ΡƒΠ΄Π΅Ρ‚ О(1).

Π’ LinkedList Π½Π°ΠΌ придСтся ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΎ количСство элСмСнтов, индСкс ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½.

ВрСмСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ для Ρ‚Π°ΠΊΠΎΠ³ΠΎ дСйствия Π±ΡƒΠ΄Π΅Ρ‚ О(n) – Π³Π΄Π΅ n – это индСкс элСмСнта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½.

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, ΠΏΠΎΠ΄ скобки большого О ΠΌΡ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ число, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ соотвСтствуСт количСству ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… дСйствий.

ВСрнСмся ΠΊ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ ΠΈ добавлСнию?

НачнСм с LinkedList.

Π’Π°ΠΊ ΠΊΠ°ΠΊ Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ большоС количСство дСйствий для добавлСния ΠΈΠ»ΠΈ удалСния элСмСнта, ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π³Π΄Π΅ находится элСмСнт, слоТно Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ – О(1) ΠΈ называСтся константной.

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ этой ΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ для ArrayList Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΆΠ΅ О(n) ΠΈ называСтся Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ.

Π’ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Ρ… с Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ зависит ΠΎΡ‚ количСства элСмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСдстоит ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Π’Π°ΠΊΠΆΠ΅ это ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΈ ΠΎΡ‚ полоТСния элСмСнта, Π² Π½Π°Ρ‡Π°Π»Π΅ списка ΠΈΠ»ΠΈ Π±Π»ΠΈΠΆΠ΅ ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ.

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΅Ρ‰Π΅ Π±Ρ‹Π²Π°Π΅Ρ‚ логарифмичСской. Выглядит ΠΎΠ½Π° Π²ΠΎΡ‚ Ρ‚Π°ΠΊ β€” O(log n).

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ отсортированный TreeSet список ΠΈΠ· 10-Ρ‚ΠΈ чисСл, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ число 2.

Π’Π°ΠΊ ΠΊΠ°ΠΊ список отсортирован ΠΈ Π² Π½Π΅ΠΌ Π½Π΅Ρ‚ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ², ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΎΠΉ части списка ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ искомоС число, ΠΎΡ‚ΠΊΠΈΠ½ΡƒΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ· частСй ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ дСйствия снова, ΠΏΠΎΠΊΠ° Π½Π΅ Π΄ΠΎΠΉΠ΄Π΅ΠΌ Π΄ΠΎ искомого элСмСнта. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ Π½Π°ΠΉΠ΄Π΅ΠΌ число, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π² log(n) количСство элСмСнтов.

Π”Π°Π²Π°ΠΉ взглянСм Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ описаны слоТности ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ.

По индСксу По ΠΊΠ»ΡŽΡ‡Ρƒ Поиск Вставка Π² ΠΊΠΎΠ½Π΅Ρ† Вставка Π² сСрСдину Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅
ArrayList O(1) N/A О(n) O(1) O(n) O(n)
LinkedList O(n) N/A O(n) O(1) O(1) O(1)
HashSet N/A O(1) O(1) N/A O(1) O(1)
TreeSet N/A O(1) O(log n) N/A O(log n) O(log n)
HashMap N/A O(1) O(1) N/A O(1) O(1)
TreeMap N/A O(1) O(log n) N/A O(log n) O(log n)
ArrayDeque N/A N/A O(n) O(1) O(1) O(1)

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρƒ нас с Ρ‚ΠΎΠ±ΠΎΠΉ Π΅ΡΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Π½Π° врСмСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ для популярных ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° вопрос, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΈΠ· Ρ‚Π°ΠΊΠΎΠ³ΠΎ количСства ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ ΠΌΡ‹ Ρ‡Π°Ρ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ArrayList, HashSet ΠΈ HashMap.

Они просто максимально эффСктивны для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π·Π°Π΄Π°Ρ‡ :)