Үндсэн ялгаа – Жагсаалт ба багц
Ихэнх програмчлалын хэлүүд ижил төрлийн өгөгдлийг хадгалахдаа массив ашигладаг. Массивуудын нэг гол дутагдал нь массивын хэмжээг зарласны дараа түүнийг өөрчлөх боломжгүй байдаг. Хэрэв програмист массивын хэмжээнээс хэтэрсэн утгыг хадгалахыг хүсвэл шинэ массив үүсгэж, байгаа элементүүдийг шинэ массив руу хуулах хэрэгтэй. Ийм нөхцөлд цуглуулгыг ашиглаж болно. Цуглуулгын тусламжтайгаар элемент нэмэх, устгах болон бусад олон үйлдлүүдийг хийх боломжтой. Java зэрэг програмчлалын хэл дээр янз бүрийн төрлийн цуглуулгууд байдаг. Жагсаалт ба Set нь цуглуулгын шатлалын интерфейс юм. Бусад интерфейсүүдийн үндсэн интерфейс нь Collection юм. List болон Set хоёрын гол ялгаа нь List нь нэг элементийг олон удаа хадгалахыг дэмждэг бол Set нь нэг элементийг олон удаа хадгалахыг дэмждэггүй явдал юм. Тиймээс багц нь давхардлыг зөвшөөрөхгүй.
Жагсаалт гэж юу вэ?
Жагсаалт нь Цуглуулгын интерфейсийг өргөтгөх интерфейс юм. Цуглуулгын интерфейс дээр хэд хэдэн арга байдаг. Нэмэх арга нь элемент нэмэхэд тусална. "Устгах арга" нь элементийг устгах явдал юм. Цуглуулгаас элементүүдийг устгахын тулд "removeAll арга" нь олон элемент нэмэх 'addAll арга' байдаг. Content арга нь Жагсаалтад тодорхой объект байгаа эсэхийг олоход тусална. 'containsAll' нь цуглуулгад олон тооны объект байгаа эсэхийг олох явдал юм. Жагсаалтын зүйлсийг давталт хийх аргыг ашиглана. Жагсаалт нь цуглуулгыг өргөтгөхөд цуглуулгын бүх аргууд нь List-д хамаарна. Эдгээр аргуудаас бусад жагсаалтад get, set гэх мэт аргууд байдаг. Программист get аргыг ашиглан тодорхой индексийн утгыг авч болно. Програмист нь тогтоосон аргыг ашиглан тодорхой индексийн утгыг тохируулж болно. 'indexOf' нь элементийн индексийг олоход хэрэглэгддэг.
Жагсаалтад байрлалаас хамааран үйлдлүүдийг хийж болно. Програмист нь индекст нэмэх өгөгдлийн элементийг өгөх боломжтой. Тиймээс энэ нь тодорхой индекс дээр нэмэгдэх болно. Хэрэв програмист индекс өгөхгүй бол уг элемент Жагсаалтын төгсгөлд нэмэгдэх болно. Энэ нь мөн оруулсан дарааллыг хадгалдаг. Хэрэв 1-р элемент нэмээд дараа нь элемент2 нэмэгдсэн бол элемент1 элемент 2-ын өмнө байх болно.
Зураг 01: Жагсаалт ба тохируулах
ArrayList, LinkedList, Vector нь List-ийг хэрэгжүүлдэг зарим ангиуд юм. ArrayList-д элементэд хандах нь хурдан боловч оруулах, устгах нь бага байдаг. ArrayList нь урсгалд аюулгүй биш юм. Олон урсгалаас ижил ArrayList-д хандах нь ижил үр дүнг өгөхгүй байж магадгүй юм. LinkedList-д элементүүд нь хойш болон урагш хоёуланд нь холбогдсон байдаг. LinkedList ашиглан элементүүдийг оруулах, устгах нь ArrayList-ээс хурдан юм. LinkedList нь жагсаалт болон дарааллыг хоёуланг нь хэрэгжүүлдэг. Вектор нь ArrayList-тэй төстэй боловч бүх аргууд синхрончлогдсон тул гишгэхээс хамгаална.
Тохиргоо гэж юу вэ?
Set нь Цуглуулгын интерфейсийг өргөтгөх интерфейс юм. Set интерфэйс нь цуглуулгыг өргөжүүлэхийн хэрээр цуглуулгын бүх аргууд нь мөн Set-д хамаарна. Set нь давхардсан утгыг дэмждэггүй. Тиймээс программист нэг элементийг хоёр удаа хадгалах боломжгүй. Энэ нь өвөрмөц элементүүдийн багцыг хадгалдаг. SortedSet интерфейс нь Set интерфейсийг өргөтгөдөг. SortedSet нь элементүүдийг эрэмбэлсэн дарааллаар нь хадгалдаг. NavigableSet интерфейс нь SortedSet-ийг өргөтгөдөг. NavigableSet нь доод, шал, тааз гэх мэт навигацийн аргуудыг өгдөг.
HashSet, LinkedHashSet болон TreeSet нь Set интерфейсийг хэрэгжүүлдэг зарим ангиуд юм. HashSet нь Set интерфейсийг хэрэгжүүлдэг. Энэ нь оруулсан дарааллыг хадгалахгүй. Хэрэв утгуудыг a, x, b гэж оруулбал, x, a, b гэж хадгалж болно. LinkedSet нь оруулсан дарааллыг хадгалдаг. Хэрэв элементүүдийг a, x, b дарааллаар оруулсан бол хадгалах дараалал нь a, x, b байх болно. TreeSet нь Set болон NavigableSet-ийг хэрэгжүүлдэг. Энэ нь оруулах дарааллыг хадгалахгүй, харин элементүүдийг эрэмбэлсэн дарааллаар хадгалдаг. Хэрэв оруулсан дараалал нь a, c, b бол элементүүд нь a, b, c хэлбэрээр хадгалагдана. Бүх HashSet, LinkedHashSet болон TreeSet нь давхардсан элементгүй болно.
Жагсаалт болон багцын хооронд ямар төстэй зүйл байдаг вэ?
- Жагсаалт болон Set интерфейс хоёулаа Цуглуулгын интерфэйсийг өргөжүүлдэг.
- Элемент нэмэх, хасах зэрэг Жагсаалт болон Set-ийн аль алиныг нь дэмждэг.
Жагсаалт ба багц хоёрын ялгаа юу вэ?
Жагсаалт ба багц |
|
Жагсаалтын интерфэйс нь индекс дээр тулгуурлан оруулах, устгах зэрэг үйлдлүүдийг гүйцэтгэх аргуудыг агуулсан Цуглуулгын дэд интерфейс юм. | Set Interface нь өвөрмөц элементүүдийг хадгалахын зэрэгцээ элемент оруулах, устгах зэрэг үйлдлүүдийг гүйцэтгэх аргуудыг агуулсан Цуглуулгын дэд интерфейс юм. |
Ангиуд | |
ArrayList, Vector болон LinkedList нь List интерфейсийг хэрэгжүүлдэг ангиуд юм. | HashSet, LinkedHashSet болон TreeSet нь Set интерфейсийг хэрэгжүүлдэг ангиуд юм. |
Элементийн давхардал | |
Жагсаалт нь элементийн давхардлыг дэмждэг. | Сет нь элементийн давхардлыг дэмждэггүй. Элементүүд өвөрмөц. |
Тогтоон – Жагсаалт ба багц
Цуглуулга нь элементүүдийг динамикаар хадгалахад ашиглагддаг. Java зэрэг програмчлалын хэл нь цуглуулгын интерфейсээр хангадаг. Жагсаалт ба Set нь Цуглуулгын интерфейст хамаарах хоёр интерфейс юм. Хоёр интерфейс нь цуглуулгыг өргөжүүлдэг. Энэ нийтлэлд Жагсаалт ба Set хоёрын ялгааг авч үзсэн. List болон Set хоёрын гол ялгаа нь List нь нэг элементийг олон удаа хадгалахыг дэмждэг бол Set нь нэг элементийг олон удаа хадгалахыг дэмждэггүй явдал юм. Багц үргэлж өвөрмөц элементүүдийг хадгалдаг.