logo

Колекции в Java

  1. Java Collection Framework
  2. Йерархия на рамката за събиране
  3. Интерфейс за събиране
  4. Итераторен интерфейс

The Колекция в Java е рамка, която предоставя архитектура за съхраняване и манипулиране на група от обекти.

Java Collections могат да постигнат всички операции, които извършвате върху данни, като търсене, сортиране, вмъкване, манипулиране и изтриване.

Java Collection означава единична единица от обекти. Рамката на Java Collection предоставя много интерфейси (Set, List, Queue, Deque) и класове ( ArrayList , вектор, LinkedList , PriorityQueue , HashSet, LinkedHashSet, TreeSet).

Какво е колекция в Java

Колекцията представлява единична единица от обекти, т.е. група.

Какво е рамка в Java

  • Той предоставя готова архитектура.
  • Той представлява набор от класове и интерфейси.
  • Не е задължително.

Какво е рамка за събиране

Рамката на колекцията представлява унифицирана архитектура за съхраняване и манипулиране на група от обекти. То има:

  1. Интерфейси и техните реализации, т.е. класове
  2. Алгоритъм

Знаеш ли?
  • Какви са двата начина за повторение на елементите на колекция?
  • Каква е разликата между класовете ArrayList и LinkedList в рамката на колекцията?
  • Каква е разликата между класовете ArrayList и Vector в рамката на колекцията?
  • Каква е разликата между класовете HashSet и HashMap в рамката за събиране?
  • Каква е разликата между класа HashMap и Hashtable?
  • Каква е разликата между интерфейса на итератора и изброяването в рамката на колекцията?
  • Как можем да сортираме елементите на обект? Каква е разликата между интерфейсите Comparable и Comparator?
  • Какво означава методът hashcode()?
  • Каква е разликата между Java колекция и Java колекции?

Йерархия на рамката за събиране

Нека видим йерархията на рамката на колекцията. The java.util пакетът съдържа всички класове и интерфейси за рамката на колекцията.

Йерархия на рамката на Java Collection

Методи за интерфейс за събиране

Има много методи, декларирани в интерфейса на колекцията. Те са както следва:

Не.МетодОписание
1публично булево добавяне (E e)Използва се за вмъкване на елемент в тази колекция.
2public boolean addAll(Collection c)Използва се за вмъкване на посочените елементи от колекцията в извикващата колекция.
3публично булево премахване (обектен елемент)Използва се за изтриване на елемент от колекцията.
4public boolean removeAll(Collection c)Използва се за изтриване на всички елементи на посочената колекция от извикващата колекция.
5по подразбиране boolean removeIf (филтър за предикати)Използва се за изтриване на всички елементи от колекцията, които отговарят на зададения предикат.
6public boolean retainAll(Collection c)Използва се за изтриване на всички елементи на извикващата колекция, с изключение на указаната колекция.
7public int size()Връща общия брой елементи в колекцията.
8публична невалидна изчистване()Той премахва общия брой елементи от колекцията.
9public boolean съдържа (обектен елемент)Използва се за търсене на елемент.
10публичен булев съдържа всички (Колекция c)Използва се за търсене на посочената колекция в колекцията.
единадесетпубличен итератор iterator()Връща итератор.
12публичен обект[] toArray()Преобразува колекцията в масив.
13публичен T[] toArray(T[] a)Преобразува колекцията в масив. Тук типът по време на изпълнение на върнатия масив е този на посочения масив.
14публичен булев isEmpty()Проверява дали колекцията е празна.
петнадесетпо подразбиране поток parallelStream()Той връща евентуално паралелен поток с колекцията като негов източник.
16поток по подразбиране stream()Той връща последователен поток с колекцията като негов източник.
17разделител по подразбиране spliterator()Той генерира Spliterator върху посочените елементи в колекцията.
18публични булеви равни (обектен елемент)Съвпада с две колекции.
19public int hashCode()Връща номера на хеш кода на колекцията.

Итераторен интерфейс

Итераторният интерфейс предоставя възможност за итериране на елементите само в посока напред.

Методи на интерфейса на итератора

Има само три метода в интерфейса на Iterator. Те са:

Не.МетодОписание
1публичен булев hasNext()Връща true, ако итераторът има повече елементи, в противен случай връща false.
2публичен обект next()Той връща елемента и премества показалеца на курсора към следващия елемент.
3public void remove()Той премахва последните елементи, върнати от итератора. Използван е по-малко.

Итерируем интерфейс

Итерируемият интерфейс е основният интерфейс за всички класове на колекцията. Интерфейсът Collection разширява интерфейса Iterable и следователно всички подкласове на интерфейса Collection също имплементират интерфейса Iterable.

Съдържа само един абстрактен метод. т.е.

 Iterator iterator() 

Той връща итератора върху елементите от тип T.

бутон за центриране на css

Интерфейс за събиране

Интерфейсът на колекцията е интерфейсът, който се изпълнява от всички класове в рамката на колекцията. Той декларира методите, които ще има всяка колекция. С други думи, можем да кажем, че интерфейсът на колекцията изгражда основата, от която зависи рамката на колекцията.

Някои от методите на интерфейса на Collection са Boolean add ( Object obj), Boolean addAll ( Collection c), void clear() и т.н., които се изпълняват от всички подкласове на интерфейса Collection.


Списък интерфейс

Интерфейсът на списък е дъщерният интерфейс на интерфейса на колекцията. Той възпрепятства структура от данни от тип списък, в която можем да съхраняваме подредената колекция от обекти. Може да има дублиращи се стойности.

Интерфейсът на списъка се реализира от класовете ArrayList, LinkedList, Vector и Stack.

За да инстанцираме интерфейса List, трябва да използваме:

 List list1= new ArrayList(); List list2 = new LinkedList(); List list3 = new Vector(); List list4 = new Stack(); 

Има различни методи в интерфейса на списъка, които могат да се използват за вмъкване, изтриване и достъп до елементите от списъка.

Класовете, които имплементират интерфейса List, са дадени по-долу.


ArrayList

Класът ArrayList имплементира интерфейса List. Той използва динамичен масив за съхраняване на дублиращия се елемент от различни типове данни. Класът ArrayList поддържа реда на вмъкване и не е синхронизиран. Елементите, съхранявани в класа ArrayList, могат да бъдат достъпни на случаен принцип. Помислете за следния пример.

 import java.util.*; class TestJavaCollection1{ public static void main(String args[]){ ArrayList list=new ArrayList();//Creating arraylist list.add('Ravi');//Adding object in arraylist list.add('Vijay'); list.add('Ravi'); list.add('Ajay'); //Traversing list through Iterator Iterator itr=list.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } } 

Изход:

 Ravi Vijay Ravi Ajay 

LinkedList

LinkedList имплементира интерфейса за събиране. Той използва двойно свързан списък вътрешно за съхраняване на елементите. Може да съхранява дублиращите се елементи. Той поддържа реда на вмъкване и не е синхронизиран. В LinkedList манипулацията е бърза, защото не е необходимо преместване.

Помислете за следния пример.

 import java.util.*; public class TestJavaCollection2{ public static void main(String args[]){ LinkedList al=new LinkedList(); al.add('Ravi'); al.add('Vijay'); al.add('Ravi'); al.add('Ajay'); Iterator itr=al.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } } 

Изход:

 Ravi Vijay Ravi Ajay 

вектор

Vector използва динамичен масив за съхраняване на елементите от данни. Подобен е на ArrayList. Той обаче е синхронизиран и съдържа много методи, които не са част от рамката на колекцията.

Помислете за следния пример.

 import java.util.*; public class TestJavaCollection3{ public static void main(String args[]){ Vector v=new Vector(); v.add('Ayush'); v.add('Amit'); v.add('Ashish'); v.add('Garima'); Iterator itr=v.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } } 

Изход:

 Ayush Amit Ashish Garima 

Стек

Стекът е подклас на Vector. Той прилага структурата на данните 'последен влязъл - първи излязъл', т.е. стек. Стекът съдържа всички методи на клас Vector и също така предоставя неговите методи като boolean push(), boolean peek(), boolean push(object o), който дефинира неговите свойства.

Помислете за следния пример.

 import java.util.*; public class TestJavaCollection4{ public static void main(String args[]){ Stack stack = new Stack(); stack.push('Ayush'); stack.push('Garvit'); stack.push('Amit'); stack.push('Ashish'); stack.push('Garima'); stack.pop(); Iterator itr=stack.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } } 

Изход:

 Ayush Garvit Amit Ashish 

Интерфейс за опашка

Интерфейсът на опашката поддържа реда първи влязъл, първи излязъл. Може да се дефинира като подреден списък, който се използва за съхраняване на елементите, които предстои да бъдат обработени. Има различни класове като PriorityQueue, Deque и ArrayDeque, които имплементират интерфейса Queue.

Интерфейсът на опашката може да бъде създаден като:

 Queue q1 = new PriorityQueue(); Queue q2 = new ArrayDeque(); 

Има различни класове, които реализират интерфейса Queue, някои от тях са дадени по-долу.


PriorityQueue

Класът PriorityQueue имплементира интерфейса Queue. Той съдържа елементите или обектите, които трябва да бъдат обработени по техните приоритети. PriorityQueue не позволява нулеви стойности да се съхраняват в опашката.

Помислете за следния пример.

 import java.util.*; public class TestJavaCollection5{ public static void main(String args[]){ PriorityQueue queue=new PriorityQueue(); queue.add('Amit Sharma'); queue.add('Vijay Raj'); queue.add('JaiShankar'); queue.add('Raj'); System.out.println('head:'+queue.element()); System.out.println('head:'+queue.peek()); System.out.println('iterating the queue elements:'); Iterator itr=queue.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } queue.remove(); queue.poll(); System.out.println('after removing two elements:'); Iterator itr2=queue.iterator(); while(itr2.hasNext()){ System.out.println(itr2.next()); } } } 

Изход:

 head:Amit Sharma head:Amit Sharma iterating the queue elements: Amit Sharma Raj JaiShankar Vijay Raj after removing two elements: Raj Vijay Raj 

И интерфейсът

Интерфейсът Deque разширява интерфейса Queue. В Deque можем да премахваме и добавяме елементите от двете страни. Deque означава двустранна опашка, която ни позволява да изпълняваме операциите и в двата края.

Deque може да бъде инстанциран като:

 Deque d = new ArrayDeque(); 

ArrayDeque

Класът ArrayDeque имплементира интерфейса Deque. Това ни улеснява да използваме Deque. За разлика от опашката, можем да добавяме или изтриваме елементи от двата края.

ArrayDeque е по-бърз от ArrayList и Stack и няма ограничения на капацитета.

Помислете за следния пример.

 import java.util.*; public class TestJavaCollection6{ public static void main(String[] args) { //Creating Deque and adding elements Deque deque = new ArrayDeque(); deque.add('Gautam'); deque.add('Karan'); deque.add('Ajay'); //Traversing elements for (String str : deque) { System.out.println(str); } } } 

Изход:

 Gautam Karan Ajay 

Задаване на интерфейс

Set Interface в Java присъства в пакета java.util. Той разширява интерфейса на колекцията. Той представлява неподреден набор от елементи, който не ни позволява да съхраняваме дублиращите се елементи. Можем да съхраним най-много една нулева стойност в Set. Наборът се изпълнява от HashSet, LinkedHashSet и TreeSet.

Наборът може да бъде създаден като:

 Set s1 = new HashSet(); Set s2 = new LinkedHashSet(); Set s3 = new TreeSet(); 

HashSet

Класът HashSet реализира Set Interface. Той представлява колекцията, която използва хеш таблица за съхранение. Хеширането се използва за съхраняване на елементите в HashSet. Съдържа уникални предмети.

Помислете за следния пример.

 import java.util.*; public class TestJavaCollection7{ public static void main(String args[]){ //Creating HashSet and adding elements HashSet set=new HashSet(); set.add('Ravi'); set.add('Vijay'); set.add('Ravi'); set.add('Ajay'); //Traversing elements Iterator itr=set.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } } 

Изход:

 Vijay Ravi Ajay 

LinkedHashSet

Класът LinkedHashSet представлява имплементацията на LinkedList на Set Interface. Той разширява класа HashSet и имплементира интерфейс Set. Подобно на HashSet, той също съдържа уникални елементи. Той поддържа реда на вмъкване и позволява нулеви елементи.

Помислете за следния пример.

 import java.util.*; public class TestJavaCollection8{ public static void main(String args[]){ LinkedHashSet set=new LinkedHashSet(); set.add('Ravi'); set.add('Vijay'); set.add('Ravi'); set.add('Ajay'); Iterator itr=set.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } } 

Изход:

 Ravi Vijay Ajay 

Интерфейс SortedSet

SortedSet е алтернативата на интерфейса Set, който осигурява цялостно подреждане на своите елементи. Елементите на SortedSet са подредени във възходящ (възходящ) ред. SortedSet предоставя допълнителни методи, които възпрепятстват естественото подреждане на елементите.

SortedSet може да бъде създаден като:

 SortedSet set = new TreeSet(); 

TreeSet

Класът Java TreeSet имплементира интерфейса Set, който използва дърво за съхранение. Подобно на HashSet, TreeSet също съдържа уникални елементи. Времето за достъп и извличане на TreeSet обаче е доста бързо. Елементите в TreeSet се съхраняват във възходящ ред.

Разгледайте следния пример:

 import java.util.*; public class TestJavaCollection9{ public static void main(String args[]){ //Creating and adding elements TreeSet set=new TreeSet(); set.add('Ravi'); set.add('Vijay'); set.add('Ravi'); set.add('Ajay'); //traversing elements Iterator itr=set.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } } 

Изход:

 Ajay Ravi Vijay 
Какво ще научим в Java Collections Framework
  1. Клас ArrayList
  2. Клас LinkedList
  3. Списък интерфейс
  4. Клас HashSet
  5. Клас LinkedHashSet
  6. Клас TreeSet
  7. Клас PriorityQueue
  8. Интерфейс на картата
  9. Клас HashMap
  10. Клас LinkedHashMap
  11. Клас TreeMap
  12. Клас хеширана таблица
  13. Сортиране
  14. Сравним интерфейс
  15. Интерфейс за сравнение
  16. Клас свойства в Java