Ako ne znate koliko ćete objekata koristiti da biste rešili neki problem ili postoji mogućnost da će im broj biti promenljiv, onda postoji i problem njihovog smeštanja u memoriju. U programskom jeziku Java rešenje tog problema predstavljaju kolekcije - objekti koji se koriste za smeštanje i manipulaciju nedefinisanim brojem objekata.
Sve što je potrebno, s gledišta dizajna korisničkog programa, jeste niz objekata koji ima promenljivu veličinu i metode koje omogućavaju da se manipuliše tim objektima. Ali ima dobrih razloga za postojanje više tipova kolekcija. Kao prvo, različite vrste kolekcija treba da imaju različite načine na koji se može manipulisati podacima koje sadrže. Kao drugo, različite vrste kolekcija imaju različite nivoe efikasnosti odrađivanja različitih operacija. (Na primer, neće se na isti način umetnuti novi element u sortiranu ili običnu listu.)
Razrađeni objektno orijentisani programski jezici sadrže paket klasa koji služe za rešenje problema kolekcija. U jeziku C++ to je STL (Standard Template Library). Pošto je Java nastala kao jezik koji je trebalo da zameni C++ u određenoj klasi problema, pa joj je jezik C++ bio početni uzor (a ona je kasnije narasla do sadašnjih mogućnosti), i u njoj se nalazi grupa takvih klasa. Java je podržavala kolekcije već od verzije 1.0; ta je podrška unekoliko bila poboljšana u verziji 1.1, ali se tek u verziji 2.0 došlo do obuhvatnije implementacije kolekcija.
Osnovne klase koje se koriste za kreiranje kolekcija tretiraju sve objekte koje mogu da sadrže kao da nemaju specifikovan tip, tačnije, bazirane su na pretpostavci da sadrže objekte tipa Object. Pošto sve klase u Javi imaju na početku svoje hijerarhije nasleđivanja klasu Object, to i ne predstavlja neki problem. Za primitivne tipove podataka (byte, char, int, float, ...) postoje klase koje se mogu koristiti umesto njih, tako da ovakvo rešenje ima dovoljnu širinu. Problem nastaje pri proveri tipa objekta koji neka kolekcija može da sadrži. Ako kreirate neki niz ili matricu promenljivih imate mogućnost provere tipova podataka koje pokušavate da upišete. To znači da za vreme pisanja programa kompajler može proveriti da li ste pogrešili prilikom pisanja programskog koda. U slučaju kolekcija to nije moguće, pa ostaje samo neprijatna mogućnost da korisnik vašeg programa tokom rada dobije poruku o neuspešnom pokušaju izvršenja nelegalne instrukcije od strane JVM-a (Java Virtual Machine), čime se prekida i rad programa.