Јава цоллецтионс фрамеwорк
Овај чланак је започет или проширен кроз пројекат семинарских радова. Потребно је проверити превод, правопис и вики-синтаксу. Када завршите са провером, допишете да након |проверено=. |
Java collections framework - JCF је скуп класа и интерфејсова који имплементирају често употребљиване колекције структура података.[1]
Историја
уредиИмплементације колекција у верзијама Јаве пре ЈДК 1.2 су садржавале неколицину класа структура података, али не и .[2] Стандардни начини за груписање Јава објеката су били помоћу низова, Vector
и Hashtable
класа, које није било лако проширити.[3]
С обзиром на потребу за динамичнијим колекцијама структура података, развијене су многе независне библиотеке,[2] од којих су најкоришћеније биле Даг Лијев (Доуг Леа) Пакет колекција (Цоллецтионс пацкаге),[4] и ОбјецтСпаце Генериц Цоллецтион Либрарy (ЈГЛ),[5] чија је сврха била конзистентност са C++ Стандард Темплате Либрарy (СТЛ).[6]
ЈЦФ је развијен и дизајниран углавном од стране Џош Блока, и појавио се у ЈДК 1.2. Користи многе идеје и класе и Даг Лијевог Пакета колекција, који тада бива превазиђен.[4] Сун цхосе нот то усе тхе идеас оф ЈГЛ, бецаусе тхеy wантед а цомпацт фрамеwорк, анд цонсистенцy wитх C++ wас нот оне оф тхеир гоалс.[7]
Архитектура
уредиСкоро све колекције насле]ују од java.util.Collection
интерфејса, који дефинише основне делове сваке колекције. Интерфејс уводи адд() и ремове() методе за додавање и избацивање из колекције. Неопходни су и тоАрраy() метод, који преводи колекцију у низ који садржи све чланове колекције, и цонтаинс() метод који проверава да ли колекција садржи неки конкретан елемент. Овај интерфејс наслеђује од java.lang.Iterable
интерфејса, чиме се омогућује обрада колекција помоћу фор-еацх израза. Све колекције имају итератор који пролази кроз све елементе у колекцији. Такође, Цоллецтион је генерички интерфејс - свака колекција може да буде написана тако да може да складишти било коју класу.[8]
Листа
уредиЛисте су имплементиране помоћу java.util.List
интерфејса. Дефинише листу која је суштински фелксибилнија верзија низа. Елементи су уређени у специфичном редоследу и дозвољени су дупликати. Елементи се могу уметнути на специфичну позицију и могућа је претрага. Имплементиране су у класама java.util.ArrayList
и java.util.LinkedList
. АрраyЛист имплементира листу као низ. Када се користе функције специфичне за листе, класа помера елементе унутар низа. ЛинкедЛист складишти елементе у чворовима који имају показиваче на претходни и наредни елемент листе.[9]
Стек
уредиСтек се имплементира помоћу java.util.Stack
. Стацк класа представља ласт-ин-фирст-оут (ЛИФО) гомилу објеката која проширује Вецтор класу са пет операција које омогућавају вектору да буде третиран као стек. Снабдевени су уобичајени пусх и поп методи, али и метод за гледање садржаја на врху стека, метод који проверава да ли је стек празан и метод који претражује стек и открива колико је тражени објекат далеко од врха. Стек се креира празан.
Ред
уредиРед је структура података која складишти своје елементе у редоследу у којем су унешени. Имплементира се користећи интерфејс java.util.Queue
. Елементи се додају на крај, а скидају са почетка, остварујући фирст-ин-фирст-оут систем. java.util.LinkedList
, java.util.ArrayDeque
, анд java.util.PriorityQueue
имплементирају овај интерфејс. ЛинкедЛист имплементира и Лист интерфејс. АрраyДеqуе имплицитно имплементира ред помоћу низа.
java.util.concurrent.BlockingQueue
је подинтерфејс java.util.Queue
који омогућава флексибилније руковање редовима. Он дозвољава да се при стављању објекта у ред провери да ли има места и, уколико нема, да се сачека извесно време да се ослободи простор. Слично, уколико се скида елемент из празног реда, чека се док се не појави.[10]
Код java.util.PriorityQueue
се елементи сортирају по приоритету који се одређује или помоћу цомпареТо() метода, или помоћу метода који се прослеђује конструктору реда са приоритетм. Ово се имплементира помоћу хипа.[11]
Ред са два краја
уредиjava.util.Deque
интерфејс омогућава креирање двоструких редова. Док обични редови дозвољавају само додавање на крају и скидање са почетка, двоструки ред омогућава да се то врши са оба краја. Могу се креират итератори за оба смера. java.util.ArrayDeque
и java.util.LinkedList
имплементирају овај интерфејс.[12]
Скуп
уредиjava.util.Set
интерфејс дефинише скуп објеката. Скуп не може да садржи дупликате и нема конкретан поредак објеката. Елементима се не може приступати помоћу индекса.
java.util.HashSet
, java.util.LinkedHashSet
, и java.util.TreeSet
имплементирају java.util.Set
. ХасхСет користи java.util.HashMap
за складиштење елемената и хешева ради спречавања настанка дупликата.
java.util.LinkedHashSet
ово проширује креирањем двоструко повезане листе која повезује елементе у редоследу којим су унети у скуп, чиме се постиже то да је редослед итерирања кроз скуп предвидив.
java.util.TreeSet
користи црвено-црно стабло имплементирано помоћу java.util.TreeMap
. Црвено-црно стабло се стара о томе да нема дупликата и омогућава ТрееСет-у да имплементира java.util.SortedSet
.[13]
java.util.SortedSet
интерфејс имплементира java.util.Set
интерфејс, али за разлику од обичног скупа његови елементи су сортирани или уз помоћ цомпареТо() методе елемента, или помоћу методе која је прослеђена конструктору сортираног скупа. Могу се повратити први и последњи елементи сортираног скупа, и могу се креирати подскупови скупа помоћу минималних и максималних вредности.
Мапа
уредиМапе су просте структуре података које асоцирају вредности са кључевима. Ако је кључ хеш вредност елемента мапа је суштински скуп, а ако је само растући број постаје листа. У Јави су мапе дефинисане помоћу java.util.Map
интерфејса. java.util.HashMap
користи хеш табелу. Хешеви кључева се користе за проналажење вредности. java.util.LinkedHashMap
ово проширује хеш мапу повезивањем елемената у двоструко повезану листу, што омогућава да се елементима приступа и по редоследу којим су додати у мапу.
java.util.TreeMap
за разлику од претходне две имплементације користи црно-црвено стабло где се кључеви користе као вредности чворова у стаблу, док чворови показују на вредности мапе.[14]
Проширења за ЈЦФ
уредиApache Commons Collections библиотека додаје типове колекција као што су џак (мултискуп) и двосмерна мапа. Такође омогућава креирање унија у пресека. .[15]
Гугл је објавио своје библиотеке колекција као део гуава библиотека.
Референце
уреди- ^ „Лессон: Интродуцтион то Цоллецтионс”. Орацле Цорпоратион. Приступљено 22. 12. 2010.
- ^ а б „Јава Цоллецтионс Фрамеwорк” (ПДФ). ИБМ. Архивирано из оригинала (ПДФ) 7. 08. 2011. г. Приступљено 01. 01. 2011.
- ^ „Гет стартед wитх тхе Јава Цоллецтионс Фрамеwорк”. ЈаваWорлд. 11. 01. 1998. Архивирано из оригинала 30. 03. 2010. г. Приступљено 1. 01. 2011. „'Бефоре Цоллецтионс маде итс мост wелцоме дебут, тхе стандард метходс фор гроупинг Јава објецтс wере виа тхе арраy, тхе Вецтор, анд тхе Хасхтабле. Алл тхрее оф тхесе цоллецтионс хаве дифферент метходс анд сyнтаx фор аццессинг мемберс: арраyс усе тхе сqуаре брацкет ([]) сyмболс, Вецтор усес тхе елементАт метход, анд Хасхтабле усес
get
андput
метходс.'” - ^ а б Доуг Леа. „Овервиеw оф тхе цоллецтионс Пацкаге”. Приступљено 1. 01. 2011. „'Тхе Сун Јава Девелопмент Кит ЈДК1.2 финаллy инцлудес а стандард сет оф цоллецтион цлассес. Wхиле тхере аре соме десигн анд имплементатион дифференцес, тхе ЈДК1.2 пацкаге цонтаинс мост оф тхе саме басиц абстрацтионс, струцтуре, анд фунцтионалитy ас тхис пацкаге. Фор тхис реасон, тхис цоллецтионс пацкаге wилл НОТ бе фуртхер упдатед'”
- ^ „Генериц Цоллецтион Либрарy фор Јава™”. Архивирано из оригинала 12. 03. 2009. г. Приступљено 1. 01. 2011.
- ^ „Неед а гоод сет оф абстрацт дата струцтурес? ОбјецтСпаце'с ЈГЛ пацкс а пунцх!”. ЈаваWорлд. 6. 01. 1997. Архивирано из оригинала 02. 03. 2012. г. Приступљено 1. 01. 2011. „'Ас wитх Јава итселф, тхе Јава Генериц Либрарy борроwс хеавилy фром тхе C++ цамп: Ит такес тхе бест фром C++'с СТЛ, wхиле леавинг тхе C++ wартс бехинд. Мост C++ программерс тодаy wилл кноw оф тхеир СТЛ, бут феw аре манагинг то еxплоит итс потентиал.'”
- ^ „Тхе баттле оф тхе цонтаинер фрамеwоркс: wхицх схоулд yоу усе?”. ЈаваWорлд. 1. 01. 1999. Архивирано из оригинала 12. 04. 2010. г. Приступљено 1. 01. 2011. „'Цомпаринг ОбјецтСпаце Инц.'с ЈГЛ анд Сун'с Цоллецтионс Фрамеwорк турнс оут то бе лике цомпаринг апплес анд киwи фруитс. Ат фирст сигхт, тхе тwо фрамеwоркс сеем то бе цомпетинг фор тхе саме девелоперс, бут афтер а цлосер инспецтион ит ис цлеар тхат тхе тwо цаннот бе цомпаред фаирлy wитхоут ацкноwледгинг фирст тхат тхе тwо фрамеwоркс хаве дифферент гоалс. Иф, лике Сун'с доцументатион статес, Цоллецтионс ис гоинг то хомогенизе Сун'с оwн АПИс (цоре АПИ, еxтенсионс, етц.), тхен цлеарлy Цоллецтионс хас то бе греат неwс, анд а гоод тхинг, евен то тхе мост фанатиц ЈГЛ аддицт. Провидед Сун доесн'т бреак итс промисе ин тхис ареа, I'лл бе хаппy то инвест мy ресоурцес ин адоптинг Цоллецтионс ин еарнест. '”
- ^ „Итерабле (Јава Платформ СЕ 7 )”. Доцс.орацле.цом. 6. 06. 2013. Приступљено 16. 08. 2013.
- ^ „Лист (Јава Платформ СЕ 7 )”. Доцс.орацле.цом. 6. 06. 2013. Приступљено 16. 08. 2013.
- ^ „БлоцкингQуеуе (Јава Платформ СЕ 7 )”. Доцс.орацле.цом. 6. 06. 2013. Приступљено 16. 08. 2013.
- ^ „ПриоритyQуеуе (Јава Платформ СЕ 7 )”. Доцс.орацле.цом. 6. 06. 2013. Приступљено 16. 08. 2013.
- ^ „Деqуе (Јава Платформ СЕ 7 )”. Доцс.орацле.цом. 6. 06. 2013. Приступљено 16. 08. 2013.
- ^ „Сет (Јава Платформ СЕ 7 )”. Доцс.орацле.цом. 6. 06. 2013. Приступљено 16. 08. 2013.
- ^ „Мап (Јава Платформ СЕ 7 )”. Доцс.орацле.цом. 6. 06. 2013. Приступљено 16. 08. 2013.
- ^ „Цоллецтионс - Хоме”. Цоммонс.апацхе.орг. 4. 07. 2013. Приступљено 16. 08. 2013.
Спољашње везе
уреди- Цоллецтионс Лессонс
- ЦоллецтионСпy — A profiler for Java's Collections Framework.
- Генериц Тyпес
- Јава 6 Цоллецтион Туториал — By Jakob Jenkov, Kadafi Kamphulusa
- Јава Генерицс анд Цоллецтионс
- Таминг Тигер: Тхе Цоллецтионс Фрамеwорк
- 'Тхе Цоллецтионс Фрамеwорк' (Oracle Java SE 7 documentation)
- 'Тхе Јава Туториалс - Цоллецтионс' бy Јосх Блоцх
- 'Wхицх Јава Цоллецтион то усе?' — by Janeve George