Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ПолноС руководство. Π‘# 4.0Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 182

Автор Π¨ΠΈΠ»Π΄Ρ‚ Π“Π΅Ρ€Π±Π΅Ρ€Ρ‚

ГЛАВА 25. ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, пСрСчислитСли ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

Π’ этой Π³Π»Π°Π²Π΅ Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎΠ± ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· самых Π²Π°ΠΆΠ½Ρ‹Ρ…ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… срСды .NET Framework: коллСкциях. Π’ Π‘# коллСкция прСдставляСт собой ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’ срСдС .NET Framework имССтся Π½Π΅ΠΌΠ°Π»ΠΎ интСрфСйсов ΠΈ классов, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡΡ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ. ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π·Π°Π΄Π°Ρ‡ программирования благодаря Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для создания Ρ†Π΅Π»ΠΎΠ³ΠΎ рядатипичных, Π½ΠΎ ΠΏΠΎΡ€ΠΎΠΉ Ρ‚Ρ€ΡƒΠ΄ΠΎΠ΅ΠΌΠΊΠΈΡ… для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ структурданных. НапримСр, Π² срСду .NET Framework встроСны ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ динамичСскихмассивов, связных списков, стСков, ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ ΠΈ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†.ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ соврСмСнным тСхнологичСским срСдством, Π·Π°ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΈΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ внимания всСх, ΠΊΡ‚ΠΎΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π° Π‘#.ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ сущСствовали Ρ‚ΠΎΠ»ΡŒΠΊΠΎ классы Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ. Но с Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉ Π² вСрсииC# 2.0 срСда .NET Framework Π±Ρ‹Π»Π° Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈΠ½ΠΎΠ²Ρ‹ΠΌΠΈ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΌΠΈ классами ΠΈ интСрфСйсами. Благодаря ввСдСнию ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ ΠΎΠ±Ρ‰Π΅Π΅ количСствоклассов ΠΈ интСрфСйсов ΡƒΠ΄Π²ΠΎΠΈΠ»ΠΎΡΡŒ. ВмСстС с библиотСкойраспараллСливания Π·Π°Π΄Π°Ρ‡ (TPL) Π² вСрсии 4.0 срСды .NETFramework появился ряд Π½ΠΎΠ²Ρ‹Ρ… классов ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для примСнСния Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° доступ ΠΊΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ осущСствляСтся ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². НСтрудно Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ интСрфСйс Collections APIсоставляСт Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ срСды .NET Framework.ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² настоящСй Π³Π»Π°Π²Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄Π²Π° срСдства, нСпосрСдствСнно связанныС с коллСкциями: пСрСчислитСли ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹. И Ρ‚Π΅ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ содСрТимому класса ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π² Ρ†ΠΈΠΊΠ»Π΅ foreach.ΠšΡ€Π°Ρ‚ΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ

Π“Π»Π°Π²Π½ΠΎΠ΅ прСимущСство ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π³Ρ€ΡƒΠΏΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. ВсС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ Π½Π° основС Π½Π°Π±ΠΎΡ€Π°Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… интСрфСйсов. НСкоторыС встроСнныС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΈΡ… интСрфСйсов, Π² Ρ‚ΠΎΠΌ числС ArrayList, Hashtable, Stack ΠΈ Queue, ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² исходном Π²ΠΈΠ΄Π΅ ΠΈ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ, хотя ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Π² этом Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΊΡ€Π°ΠΉΠ½Π΅ Ρ€Π΅Π΄ΠΊΠΎ.Π’ срСдС .NET Framework ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ: Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅,ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅, с поразрядной ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅. НСобобщСнныС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ ряд основных структур Π΄Π°Π½Π½Ρ‹Ρ…, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ динамичСский массив, стСк, ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π° Ρ‚Π°ΠΊΠΆΠ΅ словари, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Ρ‹ "ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅".Π’ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ Π²Π°ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Ρƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: ΠΎΠ½ΠΈ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ° object.Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ для хранСния Π΄Π°Π½Π½Ρ‹Ρ…Π»ΡŽΠ±ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ допускаСтся Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ€Π°Π·Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π½Π΅ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Π½ΠΈΡ… хранятся ссылкина Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° object. ΠšΠ»Π°ΡΡΡ‹ ΠΈ интСрфСйсы Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ находятся впространствС ΠΈΠΌΠ΅Π½ System.Collections.Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈΠ»ΠΈ ΠΆΠ΅ Π΄Π΅Π»Π°ΡŽΡ‚ΡΡ‚ΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ особым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. НапримСр, ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ для ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… строк, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ список. Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² пространствС ΠΈΠΌΠ΅Π½ System.Collections.Specialized.Π’ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΌ интСрфСйсС Collections API ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΎΠ΄Π½Π° коллСкция с поразрядной ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ β€” это BitArray. ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡ Ρ‚ΠΈΠΏΠ° BitArray ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ поразрядныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ‚.Π΅. ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΌΠΈ разрядами, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π˜ ΠΈΠ΄ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π΅ Π˜Π›Π˜, Π° ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ½Π° сущСствСнно отличаСтся своими возмоТностями ΠΎΡ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ. ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡ Ρ‚ΠΈΠΏΠ° BitArray ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡΠ² пространствС ΠΈΠΌΠ΅Π½ System.Collections.ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… стандартных структур Π΄Π°Π½Π½Ρ‹Ρ…, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ связныС списки, стСки, ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ словари. Π’Π°ΠΊΠΈΠ΅ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π² силу ΠΈΡ… ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π°. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°ΠΊΠΈΠ΅ элСмСнты Π΄Π°Π½Π½Ρ‹Ρ…,ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ совмСстимы ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ с Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ. Благодаря этому ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΠΎΠ΅ нСсовпадСниС Ρ‚ΠΈΠΏΠΎΠ². ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² пространствСимСн System.Collections.Generic.ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ доступ ΠΊ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΎΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² пространствС ΠΈΠΌΠ΅Π½ System.Collections.Concurrent.Π’ пространствС ΠΈΠΌΠ΅Π½ System.Collections.ObjectModel находится Ρ‚Π°ΠΊΠΆΠ΅ рядклассов, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… созданиС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ собствСнных ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ.ΠžΡΠ½ΠΎΠ²ΠΎΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‰ΠΈΠΌ для всСх ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ являСтся понятиС пСрСчислитСля, которыйподдСрТиваСтся Π² Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… интСрфСйсах IEnumerator ΠΈ IEnumerable, Π° Ρ‚Π°ΠΊΠΆΠ΅Π² ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… интСрфСйсах IEnumerator ΠΈ IEnumerable. ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒ обСспСчиваСт стандартный способ ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ доступа ΠΊ элСмСнтам ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ½ пСрСчисляСт содСрТимоС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒΡ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° обобщСнная ΠΈΠ»ΠΈ нСобобщСнная Ρ„ΠΎΡ€ΠΌΠ° интСрфСйса IEnumerable, поэтому элСмСнты любого класса ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ доступны посрСдством ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²,ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² интСрфСйсС IEnumerator ΠΈΠ»ΠΈ IEnumerator. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ,внСся ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ измСнСния Π² ΠΊΠΎΠ΄ цикличСского обращСния ΠΊ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎΡ‚ΠΈΠΏΠ°, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ³ΠΎ обращСния ΠΊ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.Π›ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ для ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ обращСния ΠΊ содСрТимому ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π² Ρ†ΠΈΠΊΠ»Π΅foreach ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒ.ΠžΡΠ½ΠΎΠ²ΠΎΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‰ΠΈΠΌ для всСх ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ являСтся понятиС пСрСчислитСля, которыйподдСрТиваСтся Π² Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… интСрфСйсах IEnumerator ΠΈ IEnumerable, Π° Ρ‚Π°ΠΊΠΆΠ΅Π² ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… интСрфСйсах IEnumerator ΠΈ IEnumerable. ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒ обСспСчиваСт стандартный способ ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ доступа ΠΊ элСмСнтам ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ½ пСрСчисляСт содСрТимоС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒΡ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° обобщСнная ΠΈΠ»ΠΈ нСобобщСнная Ρ„ΠΎΡ€ΠΌΠ° интСрфСйса IEnumerable, поэтому элСмСнты любого класса ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ доступны посрСдством ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²,ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² интСрфСйсС IEnumerator ΠΈΠ»ΠΈ IEnumerator. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ,внСся ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ измСнСния Π² ΠΊΠΎΠ΄ цикличСского обращСния ΠΊ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎΡ‚ΠΈΠΏΠ°, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ³ΠΎ обращСния ΠΊ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.Π›ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ для ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ обращСния ΠΊ содСрТимому ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π² Ρ†ΠΈΠΊΠ»Π΅foreach ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒ.Π‘ пСрСчислитСлСм нСпосрСдствСнно связано Π΄Ρ€ΡƒΠ³ΠΎΠ΅ срСдство, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ. Π­Ρ‚ΠΎ срСдство ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ процСсс создания классов ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ…, ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ организуСтся Π² Ρ†ΠΈΠΊΠ»Π΅ foreach. Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² этой Π³Π»Π°Π²Π΅.И послСднСС Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Ссли Ρƒ вас имССтся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠΏΡ‹Ρ‚ программированияна C++, Ρ‚ΠΎ Π²Π°ΠΌ, вСроятно, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ классы ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ ΠΏΠΎ своСй сути ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ классам стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ шаблонов (Standard Template Library β€” STL),ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π² C++. Π’ΠΎ, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° C++ называСтся ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ,Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° C# называСтся ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ. Π­Ρ‚ΠΎ ΠΆΠ΅ относится ΠΈ ΠΊ Java. Есливы Π·Π½Π°ΠΊΠΎΠΌΡ‹ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Collections Framework для Java, Ρ‚ΠΎ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡΠΌΠΈ Π² C# Π½Π΅ составит для вас большого Ρ‚Ρ€ΡƒΠ΄Π°.Π’ силу Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹Ρ… ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· пяти Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ (Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ…,ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ…, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ…, с поразрядной ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ…) Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСн Π΄Π°Π»Π΅Π΅ Π² этой Π³Π»Π°Π²Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ.НСобобщСнныС коллСкцииНСобобщСнныС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ вошли Π² состав срСды .NET Framework Π΅Ρ‰Π΅ Π² вСрсии 1.0.Они ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π² пространствС ΠΈΠΌΠ΅Π½ System.Collections. НСобобщСнныС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния, ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ссылками Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ любого Ρ‚ΠΈΠΏΠ°,хотя ΠΈ Π½Π΅ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ способом. Π’ этом состоит ΠΈΡ… прСимущСство ΠΈ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя нСдостаток. Благодаря Ρ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ссылками Π½Π°ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π² Π½ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Π­Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° трСбуСтся ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π·Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΈΠΏΡ‹ хранящихся Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π·Π°Ρ€Π°Π½Π΅Π΅ нСизвСстны. Но Ссли коллСкция прСдназначаСтсядля хранСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Ρ‚ΠΎ Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚Ρ‚ΠΈΠΏΠΎΠ²ΡƒΡŽ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ Π² ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… коллСкциях.НСобобщСнныС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² рядС интСрфСйсов ΠΈ классов, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΡ… эти интСрфСйсы. ВсС ΠΎΠ½ΠΈ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄Π°Π»Π΅Π΅ ΠΏΠΎ порядку.Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉΠ’ пространствС ΠΈΠΌΠ΅Π½ System.Collections ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Ρ†Π΅Π»Ρ‹ΠΉ ряд интСрфСйсовнСобобщСнных ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ. ΠΠ°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ рассмотрСниС Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ слСдуСт ΠΈΠΌΠ΅Π½Π½ΠΎ с интСрфСйсов, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ возмоТности,ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±Ρ‰ΠΈΠΌΠΈ для всСх классов Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹,слуТащиС ΠΎΠΏΠΎΡ€ΠΎΠΉ для Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, свСдСны Π² Ρ‚Π°Π±Π». 25.1. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этихинтСрфСйсов ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описываСтся Π΄Π°Π»Π΅Π΅.Π’Π°Π±Π»ΠΈΡ†Π° 25.1. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉΠ˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ICollectionΠ˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ICollection слуТит основаниСм, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ построСны всС Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. Π’ Π½Π΅ΠΌ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ основныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ свойства для всСх Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ. Он Ρ‚Π°ΠΊΠΆΠ΅ наслСдуСт ΠΎΡ‚ интСрфСйса IEnumerable.Π’ интСрфСйсС ICollection ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ пСрСчислСнныС Π½ΠΈΠΆΠ΅ свойства.Бвойство Count ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‡Π°Ρ‰Π΅ всСго, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΎ содСрТит количСство элСмСнтов, хранящихся Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства CountΡ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ, Ρ‚ΠΎ коллСкция считаСтся пустой.Π’ интСрфСйсС ICollection опрСдСляСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄.void Π‘ΠΎΡ€ΡƒΠ’ΠΎ(Array target, int startIdx)Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ОписаниСICollection ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ элСмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ всС Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈIComparer ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Compare() для сравнСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², хранящихся Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈIDictionary ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ, ΡΠΎΡΡ‚ΠΎΡΡ‰ΡƒΡŽ ΠΈΠ· ΠΏΠ°Ρ€ "ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅"IDictionaryEnumerator ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒ для ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅ΠΉ интСрфСйс IDictionaryIEnumerable ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ GetEnumerator(), ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒ для любого класса ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈIEnumerator ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ содСрТимоСколлСкции ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈIEqualityComparer Π‘Ρ€Π°Π²Π½ΠΈΠ²Π°Π΅Ρ‚ Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ равСнстваIHashCodeProvider БчитаСтся ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ. ВмСсто Π½Π΅Π³ΠΎ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс IEqualityComparerIList ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ, доступ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ индСксатораIStructuralComparable ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ CompareTo(), примСняСмый для структурного сравнСнияIStructuralEquatable ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Equals(), примСняСмый для выяснСнияструктурного, Π° Π½Π΅ ссылочного равСнства. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, опрСдСляСт ΠΌΠ΅Ρ‚ΠΎΠ΄ GetHashCode()ΠœΠ΅Ρ‚ΠΎΠ΄ Π‘ΠΎΡ€ΡƒΠ’ΠΎ() ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ содСрТимоС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π² массив target, начиная с элСмСнта, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎ индСксу startIdx. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΠ΅Ρ‚ΠΎΠ΄ Π‘ΠΎΡ€ΡƒΠ’ΠΎ() обСспСчиваСт Π² C# ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎΡ‚ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΊ стандартному массиву.Благодаря Ρ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ интСрфСйс ICollection наслСдуСт ΠΎΡ‚ интСрфСйса IEnumerable,Π² Π΅Π³ΠΎ состав Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ СдинствСнный ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π² интСрфСйсСIEnumerable. Π­Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ GetEnumerator(), ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅ΠΌΡ‹ΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.IEnumerator GetEnumerator()Он Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒ для ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ.ВслСдствиС Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ наслСдования ΠΎΡ‚ интСрфСйса IEnumerable Π² интСрфСйсС ICollection ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ:AsParallel(), AsQueryable(), Cast() ΠΈ OfType(). Π’ частности, ΠΌΠ΅Ρ‚ΠΎΠ΄ AsParallel()ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Π² классС System.Linq.ParallelEnumerable, ΠΌΠ΅Ρ‚ΠΎΠ΄ AsQueryable() β€”Π² классС System.Linq.Queryable, Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Cast() ΠΈ OfType() β€” Π² классС System.Linq.Enumerable. Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ LINQ,хотя ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… цСлях.Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ IListΠ’ интСрфСйсС IList ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ доступ ΠΊ Π΅Π΅ элСмСнтам ΠΏΠΎ индСксу с отсчСтом ΠΎΡ‚ нуля.Π­Ρ‚ΠΎΡ‚ интСрфСйс наслСдуСт ΠΎΡ‚ интСрфСйсов ICollection ΠΈ IEnumerable. ΠŸΠΎΠΌΠΈΠΌΠΎΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² этих интСрфСйсах, Π² интСрфСйсС IList опрСдСляСтся рядсобствСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ВсС эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ свСдСны Π² Ρ‚Π°Π±Π». 25.2. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ· Π½ΠΈΡ… прСдусматриваСтся модификация ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. Если ΠΆΠ΅ коллСкция доступна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ фиксированный Ρ€Π°Π·ΠΌΠ΅Ρ€, Ρ‚ΠΎ Π² этих ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… гСнСрируСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅NotSupportedException.Π’Π°Π±Π»ΠΈΡ†Π° 25.2. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² интСрфСйсС IListБвойство НазначСниСint Count { get; } Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ количСство элСмСнтов Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚bool IsSynchronized { get; } ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true, Ссли коллСкция синхронизирована, Π° ΠΈΠ½Π°Ρ‡Π΅ β€” логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π½Π΅ синхронизированы. Но для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ синхронизированный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚object SyncRoot { get; } Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ коллСкция ΠΌΠΎΠΆΠ΅Ρ‚Π±Ρ‹Ρ‚ΡŒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π°ΠœΠ΅Ρ‚ΠΎΠ΄ ОписаниСint Add(object value) ДобавляСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ value Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ.Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ сохраняСтсяvoid Clear() УдаляСт всС элСмСнты ΠΈΠ· Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈbool Contains (object value) Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true, Ссли Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ коллСкция содСрТит ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ value, Π° ΠΈΠ½Π°Ρ‡Π΅ β€” логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ falseΠžΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅ Ρ‚Π°Π±Π». 25.2ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Ρ‚ΠΈΠΏΠ° IList Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Add(). ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Add() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ‚ΠΈΠΏΠ° object. А ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒobject являСтся Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ классом для всСх Ρ‚ΠΈΠΏΠΎΠ², Ρ‚ΠΎ Π² Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сохранСн ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ любого Ρ‚ΠΈΠΏΠ°, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΈ Ρ‚ΠΈΠΏΡ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π² силу автоматичСской ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΠΈ распаковки.Для удалСния элСмСнта ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ слуТат ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Remove() ΠΈ RemoveAt(). Π’ частности, ΠΌΠ΅Ρ‚ΠΎΠ΄ Remove() удаляСт ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ RemoveAt() удаляСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ индСксу. И для опороТнСния ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Clear().Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, содСрТится Π»ΠΈ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Contains(). Для получСния индСкса ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ IndexOf(),Π° для вставки элСмСнта Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ индСксу β€” ΠΌΠ΅Ρ‚ΠΎΠ΄ Insert().Π’ интСрфСйсС IList ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ свойства.bool IsFixedSize { get; }bool IsReadOnly { get; }Если коллСкция ΠΈΠΌΠ΅Π΅Ρ‚ фиксированный Ρ€Π°Π·ΠΌΠ΅Ρ€, Ρ‚ΠΎ свойство IsFixedSize содСрТитлогичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ нСльзя Π½ΠΈ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹, Π½ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈΡ… ΠΈΠ· Π½Π΅Π΅. Если ΠΆΠ΅ коллСкция доступна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, тосвойство IsReadOnly содСрТит логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ содСрТимоС Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΏΠΎΠ΄Π»Π΅ΠΆΠΈΡ‚ измСнСнию.ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² интСрфСйсС IList опрСдСляСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ индСксатор.object this[int index] { get; set; }Π­Ρ‚ΠΎΡ‚ индСксатор слуТит для получСния ΠΈ установки значСния элСмСнта ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ.Но Π΅Π³ΠΎ нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для добавлСния Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта. Π‘ этой Ρ†Π΅Π»ΡŒΡŽ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Add(). Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ элСмСнт Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ,ΠΎΠ½ станСт доступным посрСдством индСксатора.ΠœΠ΅Ρ‚ΠΎΠ΄ ОписаниСint IndexOf(object value) Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° value, Ссли этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ΡΡ Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. Если ΠΆΠ΅ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ value Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½, Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ -1void Insert(int index,object value)ВставляСт Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ valueΠΏΠΎ индСксу index. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹, Π½Π°Ρ…ΠΎΠ΄ΠΈΠ²ΡˆΠΈΠ΅ΡΡ Π΄ΠΎ этого ΠΏΠΎ индСксу index ΠΈ дальшС, ΡΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π²ΠΏΠ΅Ρ€Π΅Π΄,Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ мСсто для вставляСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°valuevoid Remove(object value) УдаляСт ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° value Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹, Π½Π°Ρ…ΠΎΠ΄ΠΈΠ²ΡˆΠΈΠ΅ΡΡ Π΄ΠΎ этогоза ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ элСмСнтом, ΡΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π½Π°Π·Π°Π΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π²ΡˆΠΈΠΉΡΡ β€œΠΏΡ€ΠΎΠ±Π΅Π»"void RemoveAt(int index) УдаляСт ΠΈΠ· Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, располоТСнный ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ индСксу index. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹,Π½Π°Ρ…ΠΎΠ΄ΠΈΠ²ΡˆΠΈΠ΅ΡΡ Π΄ΠΎ этого Π·Π° ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ элСмСнтом,ΡΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π½Π°Π·Π°Π΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π²ΡˆΠΈΠΉΡΡβ€œΠΏΡ€ΠΎΠ±Π΅Π»β€Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ IDictionaryΠ’ интСрфСйсС IDictionary опрСдСляСтся Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ значСния. ΠšΠ»ΡŽΡ‡ прСдставляСт собой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ извлСкаСтсявпослСдствии. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅ΠΉ интСрфСйс IDictionary,хранятся ΠΏΠ°Ρ€Ρ‹ "ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅". Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ подобная ΠΏΠ°Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ сохранСна, Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π°. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ IDictionary наслСдуСт ΠΎΡ‚ интСрфСйсовICollection ΠΈ IEnumerable. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π² интСрфСйсС IDictionary, свСдСны Π² Ρ‚Π°Π±Π». 25.3. НСкоторыС ΠΈΠ· Π½ΠΈΡ… Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ArgumentNullExceptionΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ пустой ΠΊΠ»ΡŽΡ‡, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ пустыС ΠΊΠ»ΡŽΡ‡ΠΈ Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ.Π’Π°Π±Π»ΠΈΡ†Π° 25.3. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² интСрфСйсС IDictionaryДля добавлСния ΠΏΠ°Ρ€Ρ‹ "ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅" Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Ρ‚ΠΈΠΏΠ° IDictionary слуТитмСтод Add(). ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡ ΠΈ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. А для удалСния элСмСнта ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ слСдуСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΡ€ΠΈΠ²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Remove(). И для опороТнСния ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Clear().Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, содСрТит Π»ΠΈ коллСкция ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Contains() с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ искомого элСмСнта. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° GetEnumerator() получаСтся ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒ, совмСстимый с ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ Ρ‚ΠΈΠΏΠ°IDictionary. Π­Ρ‚ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠΈ "ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅".Π’ интСрфСйсС IDictionary ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ пСрСчислСнныС Π½ΠΈΠΆΠ΅ свойства.Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ значСния, содСрТащиСся Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, доступныв ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… списках с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ свойств Keys ΠΈ Values.ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² интСрфСйсС IDictionary опрСдСляСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ индСксатор.object this[object key] { get; set; }ΠœΠ΅Ρ‚ΠΎΠ΄ ОписаниСvoid Add(object key,object value)void Clear()ДобавляСт Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΏΠ°Ρ€Ρƒ "ΠΊΠ»ΡŽΡ‡-значСниС”, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ key ΠΈ valueУдаляСт всС ΠΏΠ°Ρ€Ρ‹ "ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅" ΠΈΠ· Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈbool Contains(object key) Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true, Ссли Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ коллСкция содСрТит ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ key Π² качСствС ΠΊΠ»ΡŽΡ‡Π°,Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС β€” логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ falseIDictionaryEnumeratorGetEnumerator()Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒ для Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈvoid Remove(object key) УдаляСт ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ элСмСнт, ΠΊΠ»ΡŽΡ‡ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π°Π²Π΅Π½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° keyБвойство НазначСниСbool IsFixedSize { get; } ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true, Ссли ΡΠ»ΠΎΠ²Π°Ρ€ΡŒΠΈΠΌΠ΅Π΅Ρ‚ фиксированный Ρ€Π°Π·ΠΌΠ΅Ρ€bool IsReadOnly { get; } ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true, Ссли ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ доступСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСнияICollection Keys { get; } ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΊΠ»ΡŽΡ‡Π΅ΠΉICollection Values { get; } ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉΠ­Ρ‚ΠΎΡ‚ индСксатор слуТит для получСния ΠΈ установки значСния элСмСнта ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ,Π° Ρ‚Π°ΠΊΠΆΠ΅ для добавлСния Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Π½ΠΎΠ²ΠΎΠ³ΠΎ элСмСнта. Но Π² качСствС индСкса Π² данномслучаС слуТит ΠΊΠ»ΡŽΡ‡ элСмСнта, Π° Π½Π΅ собствСнно индСкс.Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ IEnumerable, IEnumerator ΠΈ IDictionaryEnumeratorΠ˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ IEnumerable являСтся Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΌ, ΠΈ поэтому ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒΡ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² классС для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ пСрСчислитСлСй. Как пояснялось Π²Ρ‹ΡˆΠ΅, интСрфСйс IEnumerable рСализуСтся Π²ΠΎ всСх классах Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ наслСдуСтся интСрфСйсом ICollection. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ СдинствСнный ΠΌΠ΅Ρ‚ΠΎΠ΄GetEnumerator(), опрСдСляСмый Π² интСрфСйсС IEnumerable.IEnumerator GetEnumerator()Он Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ. Благодаря Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйса IEnumerable ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ содСрТимоС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π² Ρ†ΠΈΠΊΠ»Π΅ foreach.Π’ интСрфСйсС IEnumerator ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ пСрСчислитСля. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² этого интСрфСйса ΠΌΠΎΠΆΠ½ΠΎ цикличСски ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ содСрТимому ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. Еслив ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ содСрТатся ΠΏΠ°Ρ€Ρ‹ "ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅" (словари), Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ GetEnumerator()Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° IDictionaryEnumerator, Π° Π½Π΅ Ρ‚ΠΈΠΏΠ° IEnumerator. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡIDictionaryEnumerator наслСдуСт ΠΎΡ‚ интСрфСйса IEnumerator ΠΈ Π²Π²ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰ΠΈΠ΅ пСрСчислСниС словарСй.Π’ интСрфСйсС IEnumerator ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ MoveNext() ΠΈ Reset()ΠΈ свойство Current. Бпособы ΠΈΡ… примСнСния ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π΄Π°Π»Π΅Π΅ Π² этойглавС. А Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ слСдуСт ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ свойство Current содСрТит элСмСнт, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹ΠΉ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. ΠœΠ΅Ρ‚ΠΎΠ΄ MoveNext() осущСствляСт ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Ρƒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ Reset() возобновляСт пСрСчислСниС с самого Π½Π°Ρ‡Π°Π»Π°.Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ IComparer ΠΈ IEqualityComparerΠ’ интСрфСйсС IComparer опрСдСляСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Compare() для сравнСния Π΄Π²ΡƒΡ…ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².int Compare(object Ρ…, object Ρƒ)Он Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ… большС, Ρ‡Π΅ΠΌ ΡƒΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρƒ; ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ β€” Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ… мСньшС, Ρ‡Π΅ΠΌ Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρƒ; ΠΈ Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ β€” Ссли сравниваСмыС значСния Ρ€Π°Π²Π½Ρ‹. Π”Π°Π½Π½Ρ‹ΠΉ интСрфСйс ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΠ΄Π»Ρ указания способа сортировки элСмСнтов ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ.Π’ интСрфСйсС IEqualityComparer ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.bool Equals(object Ρ…, object Ρƒ)int GetHashCode(object obj)ΠœΠ΅Ρ‚ΠΎΠ΄ Equals() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true, Ссли значСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ…ΠΈ Ρƒ Ρ€Π°Π²Π½Ρ‹. А ΠΌΠ΅Ρ‚ΠΎΠ΄ GetHashCode() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ…Π΅Ρˆ-ΠΊΠΎΠ΄ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° obj.Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ IStructuralComparable ΠΈ IStructuralEquatableОба интСрфСйса IStructuralComparable ΠΈ IStructuralEquatable Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π²Π²Π΅Ρ€ΡΠΈΡŽ 4.0 срСды .NET Framework. Π’ интСрфСйсС IStructuralComparable опрСдСляСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ CompareTo(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π΄Π°Π΅Ρ‚ способ структурного сравнСния Π΄Π²ΡƒΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²Π΄Π»Ρ Ρ†Π΅Π»Π΅ΠΉ сортировки. (Π˜Π½Ρ‹ΠΌΠΈ словами, ΠœΠ΅Ρ‚ΠΎΠ΄ CompareTo() сравниваСт ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° Π½Π΅ ссылки Π½Π° Π½ΠΈΡ….) НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Ρ„ΠΎΡ€ΠΌΠ° объявлСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.int CompareTo(object other, IComparer comparer)Он Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ -1, Ссли Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒother; 1, Ссли Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ слСдуСт послС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° other; ΠΈ Π½Π°ΠΊΠΎΠ½Π΅Ρ†, 0, СслизначСния ΠΎΠ±ΠΎΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ для Ρ†Π΅Π»Π΅ΠΉ сортировки. А само сравнСниС обСспСчиваСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ comparer.Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ IStructuralEquatable слуТит для выяснСния структурного равСнства ΠΏΡƒΡ‚Π΅ΠΌ сравнСния содСрТимого Π΄Π²ΡƒΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π’ этом интСрфСйсС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.bool Equals(object other, IEqualityComparer comparer)int GetHashCode(IEqualityComparer comparer)ΠœΠ΅Ρ‚ΠΎΠ΄ Equals() Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true, Ссли Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ other Ρ€Π°Π²Π½Ρ‹. А ΠΌΠ΅Ρ‚ΠΎΠ΄ GetHashCode() Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡ…Π΅Ρˆ-ΠΊΠΎΠ΄ для Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ ΠΎΠ±ΠΎΠΈΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ,Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ совмСстимы. Π‘Π°ΠΌΠΎ сравнСниС обСспСчиваСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ Ρ‡Π΅Ρ€Π΅Π·ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ comparer.Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° DictionaryEntryΠ’ пространствС ΠΈΠΌΠ΅Π½ System.Collections ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° структура DictionaryEntry.НСобобщСнныС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΏΠ°Ρ€ "ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅" ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ эти ΠΏΠ°Ρ€Ρ‹ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Ρ‚ΠΈΠΏΠ°DictionaryEntry. Π’ Π΄Π°Π½Π½ΠΎΠΉ структурС ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π΄Π²Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… свойства.public object Key { get; set; }public object Value { get; set; }Π­Ρ‚ΠΈ свойства слуТат для доступа ΠΊ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, связанному с элСмСнтомколлСкции. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° DictionaryEntry ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сконструирован с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π°:public DictionaryEntry(object key, object value)Π³Π΄Π΅ key ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠ»ΡŽΡ‡, a value β€” Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.ΠšΠ»Π°ΡΡΡ‹ Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… коллСкцийА Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° прСдставлСны интСрфСйсы Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ стандартных классов, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ классы Π½Π΅ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° BitArray,рассматриваСмой Π΄Π°Π»Π΅Π΅ Π² этой Π³Π»Π°Π²Π΅.Класс ОписаниСArrayList ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ динамичСский массив, Ρ‚.Π΅. Ρ‚Π°ΠΊΠΎΠΉ массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ принСобходимости ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ свой Ρ€Π°Π·ΠΌΠ΅Ρ€Hashtable ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ для ΠΏΠ°Ρ€ β€œΠΊΠ»ΡŽΡ‡-значСниС”Queue ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΈΠ»ΠΈ список, Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ β€œΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΡ€ΠΈΡˆΠ΅Π» β€” ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ обслуТСн”SortedList ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ отсортированный список ΠΏΠ°Ρ€ β€œΠΊΠ»ΡŽΡ‡-значСниС”Stack ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ стСк, ΠΈΠ»ΠΈ список, Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ "ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΡ€ΠΈΡˆΠ΅Π» —послСдним ΠΎΠ±ΡΠ»ΡƒΠΆΠ΅Π½β€ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих классов ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассматриваСтся ΠΈ дСмонстрируСтсядалСС Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ….Класс ArrayListΠ’ классС ArrayList ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ динамичСскиС массивы, Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΈΡΠΎΠΊΡ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости. Π’ языкС C# стандартныС массивы ΠΈΠΌΠ΅ΡŽΡ‚ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ, которая Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ количСство элСмСнтов Π² массивС Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ Π·Π°Ρ€Π°Π½Π΅Π΅. Но ΠΈΠ½ΠΎΠ³Π΄Π° трСбуСмая конкрСтная Π΄Π»ΠΈΠ½Π° массива остаСтся нСизвСстной Π΄ΠΎ самого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ИмСнно для Ρ‚Π°ΠΊΠΈΡ… ситуаций ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ класс ArrayList. Π’ классС ArrayList опрСдСляСтся массив ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ состоит ΠΈΠ· ссылок Π½Π°ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ динамичСски ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒ свой Ρ€Π°Π·ΠΌΠ΅Ρ€. Массив Ρ‚ΠΈΠΏΠ°ArrayList создаСтся с ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ. Если этот Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ΡΡ, томассив автоматичСски Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ. А ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ· Ρ‚Π°ΠΊΠΎΠ³ΠΎ массива онавтоматичСски сокращаСтся. ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ класса ArrayList ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π²ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ программирования Π½Π° Π‘#. ИмСнно поэтому ΠΎΠ½ΠΈ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ здСсь ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ. Но ΠΌΠ½ΠΎΠ³ΠΈΠ΅ способы примСнСния ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ класса ArrayList Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, Π² Ρ‚ΠΎΠΌ числС ΠΈ Π½Π° ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Π΅.Π’ классС ArrayList Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ интСрфСйсы ICollection, IList, IEnumerableΠΈ ICloneable. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ конструкторы класса ArrayList.public ArrayList()public ArrayList(ICollection c)public ArrayList(int capacity)ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ конструктор создаСт ΠΏΡƒΡΡ‚ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ класса ArrayList с Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒΡŽ. Π’Ρ‚ΠΎΡ€ΠΎΠΉ конструктор создаСт ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Ρ‚ΠΈΠΏΠ° ArrayList с количСством ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… элСмСнтов, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ опрСдСляСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ с ΠΈ Ρ€Π°Π²Π½ΠΎΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Смкости массива. Π’Ρ€Π΅Ρ‚ΠΈΠΉ конструктор создаСт ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ, ΠΈΠΌΠ΅ΡŽΡ‰ΡƒΡŽΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ сараcity. Π’ данномслучаС Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ массива, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ для хранСния элСмСнтов ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. Π•ΠΌΠΊΠΎΡΡ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° ArrayList ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ автоматичСски ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ добавлСния Π² Π½Π΅Π΅ элСмСнтов.Π’ классС ArrayList опрСдСляСтся ряд собствСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΏΠΎΠΌΠΈΠΌΠΎ Ρ‚Π΅Ρ…, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π² интСрфСйсах, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Π½Π΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ. НСкоторыС ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Ρ‡Π°ΡΡ‚ΠΎΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса ArrayList пСрСчислСны Π² Ρ‚Π°Π±Π». 25.4. ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ классаArrayList ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π²Ρ‹Π·Π²Π°Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ Sort(). Π’ этом случаС поиск Π² отсортированной ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° BinarySearch() становится Π΅Ρ‰Π΅ болССэффСктивным. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° ArrayList ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ, Π²Ρ‹Π·Π²Π°Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ Reverse().Π’Π°Π±Π»ΠΈΡ†Π° 25.4. НаиболСС часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π² классС ArrayListΠœΠ΅Ρ‚ΠΎΠ΄ ОписаниСpublic virtual voidAddRange(Icollection с)public virtual intBinarySearch(objectvalue)ДобавляСт элСмСнты ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ с Π² ΠΊΠΎΠ½Π΅Ρ† Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° ArrayListВыполняСт поиск Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ значСнияvalue. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ элСмСнта. ЕслиискомоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ список Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π°Π±Π». 25.4ΠœΠ΅Ρ‚ΠΎΠ΄ ОписаниСpublic virtual intBinarySearch(objectvalue, Icomparercomparer)ВыполняСт поиск Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ значСнияvalue, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ для сравнСния способ, опрСдСляСмыйпарамСтром comparer. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс совпавшСго элСмСнта. Если искомоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ списокдолТСн Π±Ρ‹Ρ‚ΡŒ отсортированpublic virtual intBinarySearch(int index,int count, object value,IComparer comparer)ВыполняСт поиск Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ значСнияvalue, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ для сравнСния способ, опрСдСляСмыйпарамСтром comparer. Поиск начинаСтся с элСмСнта,ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎ индСксу index, ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ количСствоэлСмСнтов, опрСдСляСмых ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ count. ΠœΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс совпавшСго элСмСнта. Если искомоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ список Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ отсортированpublic virtual voidΠ‘ΠΎΡ€ΡƒΠ’ΠΎ(Array array)ΠšΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ содСрТимоС Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π² массив array, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌ ΠΈ совмСстимым ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ с элСмСнтами ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈpublic virtual voidΠ‘ΠΎΡ€ΡƒΠ’ΠΎ(Array array, intarrayIndex)ΠšΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ содСрТимоС Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π² массивarray, начиная с элСмСнта, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎ индСксуarrayIndex. Π¦Π΅Π»Π΅Π²ΠΎΠΉ массив Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌ ΠΈ совмСстимым ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ с элСмСнтами ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈpublic virtual voidCopyTo(int index, Arrayarray, int arrayIndex,int count)ΠšΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, начиная с элСмСнта, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎ индСксу index, ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ количСство элСмСнтов, опрСдСляСмых ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ count,Π² массив array, начиная с элСмСнта, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ поиндСксу arrayIndex. Π¦Π΅Π»Π΅Π²ΠΎΠΉ массив Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌ ΠΈ совмСстимым ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ с элСмСнтами ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈpublic static ArrayListFixedSize(ArrayList list)public virtual ArrayListGetRange(int index, intcount)Π—Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ list Π² ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ Ρ‚ΠΈΠΏΠ° ArrayListс фиксированным Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ°ArrayList. Π§Π°ΡΡ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ начинаСтся с элСмСнта, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎ индСксу index, ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ количСство элСмСнтов, опрСдСляСмоС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌcount. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ссылаСтся Π½Π° Ρ‚Π΅ ΠΆΠ΅ элСмСнты, Ρ‡Ρ‚ΠΎ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚public virtual intIndexOf(object value)Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ вхоТдСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° valueΠ² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. Если искомый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ -1public virtual voidInsertRange(int index,ICollection c)ВставляСт элСмСнты ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ с Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ, начиная с элСмСнта, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎ индСксуindexpublic virtual intLastlndexOf(object value)Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс послСднСго вхоТдСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°value Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. Если искомый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½, ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ -1ΠžΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅ Ρ‚Π°Π±Π». 25.4Π’ классС ArrayList поддСрТиваСтся Ρ‚Π°ΠΊΠΆΠ΅ ряд ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… элСмСнтами ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π² Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ…. Π’Π°ΠΊ, Π² ΠΎΠ΄Π½Ρƒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Ρ‚ΠΈΠΏΠ° ArrayList ΠΌΠΎΠΆΠ½ΠΎΠ²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ, Π²Ρ‹Π·Π²Π°Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ InsertRange(). Для удалСния ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ элСмСнтов Π² Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… достаточно Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ RemoveRange(). А Π΄Π»ΡΠœΠ΅Ρ‚ΠΎΠ΄ ОписаниСpublic static ArrayListReadonly(ArrayList list)Π—Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ list Π² ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ Ρ‚ΠΈΠΏΠ°ArrayList, Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΡƒΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚public virtual voidRemoveRange(int index,int count)УдаляСт Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, начиная с элСмСнта, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎ индСксу index, ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ элСмСнтов, опрСдСляСмоС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌcountpublic virtual voidReverse()РасполагаСт элСмСнты Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкСpublic virtual voidReverse(int index, intcount)РасполагаСт Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, начиная с элСмСнта, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎ индСксу index, ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ количСство элСмСнтов, опрСдСляСмоС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ countpublic virtual voidSetRange(int index,ICollection c)ЗамСняСт Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, начиная с элСмСнта, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎ индСксу index, элСмСнтамиколлСкции сpublic virtual voidSort()Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ ΠΏΠΎ Π½Π°Ρ€Π°ΡΡ‚Π°ΡŽΡ‰Π΅ΠΉpublic virtual voidSort(Icomparer comparer)Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ для сравнСния способ, опрСдСляСмый ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ comparer.Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ comparer ΠΈΠΌΠ΅Π΅Ρ‚ пустоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, тодля сравнСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ способ, Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌΡ‹ΠΉ ΠΏΠΎΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽpublic virtual voidSort(int index, intcount, Icomparercomparer)Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ для сравнСния способ, опрСдСляСмый ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ comparer.Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° начинаСтся с элСмСнта, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ поиндСксу index, ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ количСство элСмСнтов,опрСдСляСмых ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ count. Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€comparer ΠΈΠΌΠ΅Π΅Ρ‚ пустоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ для сравнСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ способ, Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌΡ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽpublic static ArrayListSynchronized(ArrayListlist)Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ синхронизированный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈΡ‚ΠΈΠΏΠ° ArrayList, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°listpublic virtual object[]ToArray()Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив, содСрТащий ΠΊΠΎΠΏΠΈΠΈ элСмСнтов Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°public virtual ArrayToArray(Type type)Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив, содСрТащий ΠΊΠΎΠΏΠΈΠΈ элСмСнтов Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ΠΈΠΏ элСмСнтов этого массива опрСдСляСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ typepublic virtual voidTrimToSize()УстанавливаСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства Capacity Ρ€Π°Π²Π½Ρ‹ΠΌΠ·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ свойства CountпСрСзаписи элСмСнтов ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° ArrayList Π² Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… элСмСнтамииз Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ слуТит ΠΌΠ΅Ρ‚ΠΎΠ΄ SetRange(). И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, элСмСнты ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΡΠΊΠ°Ρ‚ΡŒ Π² Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ…, Π° Π½Π΅ Π²ΠΎ всСй ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ.По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ коллСкция Ρ‚ΠΈΠΏΠ° ArrayList Π½Π΅ синхронизирована. Для получСниясинхронизированной ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ коллСкция, вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄Synchronized().Π’ классС ArrayList имССтся Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π½ΠΈΠΆΠ΅ свойство Capacity, помимосвойств, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² интСрфСйсах, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Π½Π΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ.public virtual int Capacity { get; set; }Бвойство Capacity позволяСт ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° ArrayList. Π•ΠΌΠΊΠΎΡΡ‚ΡŒ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ количСство элСмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ коллСкция Ρ‚ΠΈΠΏΠ° ArrayList Π΄ΠΎ Π΅Π΅ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ. Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, коллСкция Ρ‚ΠΈΠΏΠ° ArrayList Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ автоматичСски, ΠΈ поэтому Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Π΅Π΅ Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. Но ΠΈΠ· сообраТСний эффСктивности это ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ссли количСство элСмСнтов ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ извСстно Π·Π°Ρ€Π°Π½Π΅Π΅. Благодаряэтому ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ ΠΈΠ·Π΄Π΅Ρ€ΠΆΠΊΠΈ Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти.Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Ссли трСбуСтся ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ массива ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈΡ‚ΠΈΠΏΠ° ArrayList, Ρ‚ΠΎ для этой Ρ†Π΅Π»ΠΈ достаточно ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ мСньшСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойстваCapacity. Но это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ мСньшС значСния свойства Count. Напомним, Ρ‡Ρ‚ΠΎ свойство Count ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π² интСрфСйсС ICollection ΠΈ содСрТит количСство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², хранящихся Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Всякая ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства Capacity мСньшС значСния свойства Count ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ArgumentOutOfRangeException. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для получСния такогоколичСства элСмСнтов ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° ArrayList, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ содСрТится Π² Π½Π΅ΠΉ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, слСдуСт ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства Capacity Ρ€Π°Π²Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ свойства Count. Для этой Ρ†Π΅Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ TrimToSize().Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ дСмонстрируСтся ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ классаArrayList. Π’ Π½Π΅ΠΉ сначала создаСтся коллСкция Ρ‚ΠΈΠΏΠ° ArrayList, Π° Π·Π°Ρ‚Π΅ΠΌ Π² эту ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ вводятся символы, послС Ρ‡Π΅Π³ΠΎ содСрТимоС ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ отобраТаСтся. НСкоторыСэлСмСнты Π·Π°Ρ‚Π΅ΠΌ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, ΠΈ Π΅Π΅ содСрТимоС отобраТаСтся вновь. ΠŸΠΎΡΠ»Π΅ΡΡ‚ΠΎΠ³ΠΎ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ вводятся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ элСмСнты, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π½ΡƒΠΆΠ΄Π°Π΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π΅Π΅Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ. И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, содСрТимоС элСмСнтов ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ измСняСтся.// ΠŸΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ класса ArrayList.using System;using System.Collections;class ArrayListDemo {static void Main() {// Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Π² Π²ΠΈΠ΄Π΅ динамичСского массива.ArrayList al = new ArrayList();Console.WriteLine("Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ количСство элСмСнтов: " + al.Count);Console.WriteLine();Console.WriteLine("Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ 6 элСмСнтов");// Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ элСмСнты Π² динамичСский массив.al.Add('Π‘');al.Add('A');al.Add('E');al.Add('Π’');al.Add('D');al.Add('F');Console.WriteLine("ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ элСмСнтов: " + al.Count);// ΠžΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ содСрТимоС динамичСского массива,// ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ индСксированиС массива.Console.Write("Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ содСрТимоС: ");for(int i=0; i < al.Count; i++)Console.Write(al[i] + " ");Console.WriteLine("\n");Console.WriteLine("Π£Π΄Π°Π»ΠΈΡ‚ΡŒ 2 элСмСнта");// Π£Π΄Π°Π»ΠΈΡ‚ΡŒ элСмСнты ΠΈΠ· динамичСского массива.al.Remove('F');al.Remove('A');Console.WriteLine("ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ элСмСнтов: " + al.Count);// ΠžΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ содСрТимоС динамичСского массива, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ†ΠΈΠΊΠ» foreach.Console.Write("Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅: ");foreach(char с in al)Console.Write(с + " ");Console.WriteLine("\n");Console.WriteLine("Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ 20 элСмСнтов");// Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ количСство элСмСнтов, достаточноС для// ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ массива.for (int i=0; i < 20; i++)al.Add((char)('a' + i));Console.WriteLine("ВСкущая Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ: " + al.Capacity);Console.WriteLine("ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ элСмСнтов послС добавлСния 20 Π½ΠΎΠ²Ρ‹Ρ…: " +al.Count);Console.Write("Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅: ");foreach(char с in al)Console.Write(с + " ");Console.WriteLine("\n");// Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ содСрТимоС динамичСского массива,// ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ индСксированиС массива.Console.WriteLine("Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… элСмСнта");al[0] = 'X';al[1] = 'Y';al[2] = 'Z';Console.Write("Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅: ");foreach(char с in al)Console.Write(c + "Console.WriteLine();}}Π’ΠΎΡ‚ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ количСство элСмСнтов: 0Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ 6 ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ²ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ элСмСнтов: 6Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ содСрТимоС: Π‘ А Π• Π’ D FΠ£Π΄Π°Π»ΠΈΡ‚ΡŒ 2 ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ элСмСнтов: 4Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅: Π‘ Π• Π’ DΠ”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ 20 элСмСнтовВСкущая Π΅ΠΌΠΊΠΎΡΡ‚ΡŒ: 32ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ элСмСнтов послС добавлСния 20 Π½ΠΎΠ²Ρ‹Ρ…: 24Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅: C E B D a b c d e f g h i j k l m n o p q r s tΠ˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… элСмСнтаБодСрТимоС: X Y Z D a b c d e f g h i j k l m n o p q r s tΠ‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈ поиск Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° ArrayListΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Ρ‚ΠΈΠΏΠ° ArrayList ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Sort().Π’ этом случаС поиск Π² отсортированной ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° BinarySearch()становится Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ эффСктивным. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΠΎΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² дСмонстрируСтсяв ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.// ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Ρ‚ΠΈΠΏΠ° ArrayList ΠΈ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ Π² Π½Π΅ΠΉ поиск.using System;using System.Collections;class SortSearchDemo {static void Main() {// Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Π² Π²ΠΈΠ΄Π΅ динамичСского массива.ArrayList al = new ArrayList();// Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ элСмСнты Π² динамичСский массив.al.Add(55);al.Add(43);al.Add(-4);al.Add(88);al.Add(3);al.Add(19);Console.Write("Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ содСрТимоС: ");foreach(int i in al)Console.Write(i + " ");Console.WriteLine("\n");// ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ динамичСский массив.al.Sort();// ΠžΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ содСрТимоС динамичСского массива, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ†ΠΈΠΊΠ» foreach.Console.Write("Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ послС сортировки: ");foreach(int i in al)Console.Write(i + " ");Console.WriteLine("\n");Console.WriteLine("ИндСкс элСмСнта 43: " +al.BinarySearch(43));}}НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ содСрТимоС: 55 43 -4 88 3 19Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ послС сортировки: -4 3 19 43 55 88ИндСкс элСмСнта 43: 3Π’ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° ArrayList ΠΌΠΎΠ³ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π»ΡŽΠ±ΠΎΠ³ΠΎΡ‚ΠΈΠΏΠ°. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π²ΠΎ врСмя сортировки ΠΈ поиска Π² Π½Π΅ΠΉ эти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ приходится ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ. Π’Π°ΠΊ, Ссли Π±Ρ‹ список ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ содСрТал ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½ΡƒΡŽ строку, Ρ‚ΠΎ ΠΈΡ… сравнСниС ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ Π±Ρ‹ ΠΊ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ситуации.Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, для сравнСния ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… строк ΠΈ Ρ†Π΅Π»Ρ‹Ρ… чисСл ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. О Ρ‚Π°ΠΊΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… сравнСния Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Π΄Π°Π»Π΅Π΅ Π² этой Π³Π»Π°Π²Π΅.ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ массива ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° ArrayListΠ’ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠ΅ΠΉ Ρ‚ΠΈΠΏΠ° ArrayList ΠΈΠ½ΠΎΠ³Π΄Π° трСбуСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· Π΅Π΅ содСрТимого ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ массив. Π­Ρ‚ΠΎΠΉ Ρ†Π΅Π»ΠΈ слуТит ΠΌΠ΅Ρ‚ΠΎΠ΄ ВоАrrΠ°Ρƒ(). Для прСобразованияколлСкции Π² массив имССтся нСсколько ΠΏΡ€ΠΈΡ‡ΠΈΠ½. Π”Π²Π΅ ΠΈΠ· Π½ΠΈΡ… Ρ‚Π°ΠΊΠΎΠ²Ρ‹: ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ Π² ускорСнии ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΠΌΠ°ΡΡΠΈΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ пСрСгруТаСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ. Но нСзависимоот ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ коллСкция Ρ‚ΠΈΠΏΠ° ArrayList прСобразуСтся Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ массивдовольно просто, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.// ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ Ρ‚ΠΈΠΏΠ° ArrayList Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ массив.using System;using System.Collections;class ArrayListToArray {static void Main() {ArrayList al = new ArrayList();// Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ элСмСнты Π² динамичСский массив.al.Add(1);al.Add(2);al.Add(3);al.Add(4);Console.Write("Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅: ");foreach(int i in al)Console.Write(i + " ");Console.WriteLine();// ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ массив.int[] ia = (int[]) al.ToArray(typeof(int));int sum = 0;// ΠŸΡ€ΠΎΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ элСмСнты массива.for(int i=0; i ");int a = (int) st.Pop();ΠœΠ΅Ρ‚ΠΎΠ΄ ОписаниСpublic virtual void Clear() УстанавливаСт свойство Count Ρ€Π°Π²Π½Ρ‹ΠΌ Π½ΡƒΠ»ΡŽ, очищая, ΠΏΠΎ сущСству, стСкpublic virtual boolContains (object obj)Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true, Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚obj содСрТится Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ стСкС, Π° ΠΈΠ½Π°Ρ‡Π΅ —логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ falsepublic virtual object Peek() Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ элСмСнт, находящийся Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ стСка, Π½ΠΎ Π½Π΅ удаляСт Π΅Π³ΠΎpublic virtual object Pop() Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ элСмСнт, находящийся Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ стСка, удаляя Π΅Π³ΠΎ ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ Π΄Π΅Π»Π°public virtual voidPush (object obj)ΠŸΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ obj Π² стСкpublic static StackSynchronized(Stack stack)Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ синхронизированный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° Stack, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° stackpublic virtual object[]ToArray()Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив, содСрТащий ΠΊΠΎΠΏΠΈΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ²Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ стСкаConsole.WriteLine(a);Console.Write("Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ стСка: ");foreach(int i in st)Console.Write(i + " ");Console.WriteLine();}static void Main() {Stack st = new Stack ();foreach(int i in st)Console.Write(i + " ");Console.WriteLine();ShowPush(st, 22);ShowPush(st, 65);ShowPush(st, 91);ShowPop(st);ShowPop(st);ShowPop(st);try {ShowPop(st);} catch (InvalidOperationException) {Console.WriteLine("Π‘Ρ‚Π΅ΠΊ пуст.");}}}Ни