Пређи на садржај

Јава цоллецтионс фрамеwорк

С Википедије, слободне енциклопедије
class- and interface hierarchy of java.util.Map

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]

Гугл је објавио своје библиотеке колекција као део гуава библиотека.

Референце

[уреди | уреди извор]
  1. ^ „Лессон: Интродуцтион то Цоллецтионс”. Орацле Цорпоратион. Приступљено 22. 12. 2010. 
  2. ^ а б „Јава Цоллецтионс Фрамеwорк” (ПДФ). ИБМ. Архивирано из оригинала (ПДФ) 7. 08. 2011. г. Приступљено 01. 01. 2011. 
  3. ^ „Гет стартед wитх тхе Јава Цоллецтионс Фрамеwорк”. ЈаваWорлд. 11. 01. 1998. Архивирано из оригинала 30. 03. 2010. г. Приступљено 1. 01. 2011. „'Бефоре Цоллецтионс маде итс мост wелцоме дебут, тхе стандард метходс фор гроупинг Јава објецтс wере виа тхе арраy, тхе Вецтор, анд тхе Хасхтабле. Алл тхрее оф тхесе цоллецтионс хаве дифферент метходс анд сyнтаx фор аццессинг мемберс: арраyс усе тхе сqуаре брацкет ([]) сyмболс, Вецтор усес тхе елементАт метход, анд Хасхтабле усес get анд put метходс.' 
  4. ^ а б Доуг Леа. „Овервиеw оф тхе цоллецтионс Пацкаге”. Приступљено 1. 01. 2011. „'Тхе Сун Јава Девелопмент Кит ЈДК1.2 финаллy инцлудес а стандард сет оф цоллецтион цлассес. Wхиле тхере аре соме десигн анд имплементатион дифференцес, тхе ЈДК1.2 пацкаге цонтаинс мост оф тхе саме басиц абстрацтионс, струцтуре, анд фунцтионалитy ас тхис пацкаге. Фор тхис реасон, тхис цоллецтионс пацкаге wилл НОТ бе фуртхер упдатед' 
  5. ^ „Генериц Цоллецтион Либрарy фор Јава™”. Архивирано из оригинала 12. 03. 2009. г. Приступљено 1. 01. 2011. 
  6. ^ „Неед а гоод сет оф абстрацт дата струцтурес? ОбјецтСпаце'с ЈГЛ пацкс а пунцх!”. Јава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плоит итс потентиал.' 
  7. ^ „Тхе баттле оф тхе цонтаинер фраме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 ресоурцес ин адоптинг Цоллецтионс ин еарнест. ' 
  8. ^ „Итерабле (Јава Платформ СЕ 7 )”. Доцс.орацле.цом. 6. 06. 2013. Приступљено 16. 08. 2013. 
  9. ^ „Лист (Јава Платформ СЕ 7 )”. Доцс.орацле.цом. 6. 06. 2013. Приступљено 16. 08. 2013. 
  10. ^ „БлоцкингQуеуе (Јава Платформ СЕ 7 )”. Доцс.орацле.цом. 6. 06. 2013. Приступљено 16. 08. 2013. 
  11. ^ „ПриоритyQуеуе (Јава Платформ СЕ 7 )”. Доцс.орацле.цом. 6. 06. 2013. Приступљено 16. 08. 2013. 
  12. ^ „Деqуе (Јава Платформ СЕ 7 )”. Доцс.орацле.цом. 6. 06. 2013. Приступљено 16. 08. 2013. 
  13. ^ „Сет (Јава Платформ СЕ 7 )”. Доцс.орацле.цом. 6. 06. 2013. Приступљено 16. 08. 2013. 
  14. ^ „Мап (Јава Платформ СЕ 7 )”. Доцс.орацле.цом. 6. 06. 2013. Приступљено 16. 08. 2013. 
  15. ^ „Цоллецтионс - Хоме”. Цоммонс.апацхе.орг. 4. 07. 2013. Приступљено 16. 08. 2013. 

Спољашње везе

[уреди | уреди извор]