Collections in Java
Collections in Java
Collections in Java
A Collection is a group of individual objects represented as a single unit. Java provides
Collection Framework which defines several classes and interfaces to represent a group
of objects as a single unit.
The Collection interface (java.util.Collection) and Map interface (java.util.Map) are the
two main “root” interfaces of Java collection classes.
Need for Collection Framework :
Before Collection Framework (or before JDK 1.2) was introduced, the standard
methods for grouping Java objects (or collections) were Arrays or Vectors or Hashtables.
All of these collections had no common interface.
Accessing elements of these Data Structures was a hassle as each had a different
method (and syntax) for accessing its members:
Hierarchy of Collection Framework
Let us see the hierarchy of Collection framework. The java.util package contains all the
classes and interfaces for the Collection framework.
Methods of Collection interface
List Interface(i)
List interface is the child interface of Collection interface. It inhibits a list type data structure
in which we can store the ordered collection of objects. It can have duplicate values.
List interface is implemented by the classes ArrayList, LinkedList, Vector, and Stack.
i. List <data-type> list1= new ArrayList();
ii. List <data-type> list2 = new LinkedList();
iii. List <data-type> list3 = new Vector();
iv. List <data-type> list4 = new Stack();
ArrayList(class)
The ArrayList class implements the List interface. It uses a dynamic array to store
the duplicate element of different data types. The ArrayList class maintains the insertion
order and is non-synchronized. The elements stored in the ArrayList class can be randomly
accessed. Consider the following example.
import java.util.*;
class TestJavaCollection1{
public static void main(String args[]){
ArrayList<String> list=new ArrayList<String>();//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());
}
}
}
Output:
Ravi
Vijay
Ravi
Ajay
LinkedList
LinkedList implements the Collection interface. It uses a doubly linked list internally to store
the elements. It can store the duplicate elements. It maintains the insertion order and is not
synchronized. In LinkedList, the manipulation is fast because no shifting is required.
1. import java.util.*;
2. public class TestJavaCollection2{
3. public static void main(String args[]){
4. LinkedList<String> al=new LinkedList<String>();
5. al.add("Ravi");
6. al.add("Vijay");
7. al.add("Ravi");
8. al.add("Ajay");
9. Iterator<String> itr=al.iterator();
10. while(itr.hasNext()){
11. System.out.println(itr.next());
12. }
13. }
14. }
Output:
Ravi
Vijay
Ravi
Ajay
Vector
Vector uses a dynamic array to store the data elements. It is similar to ArrayList. However,
It is synchronized and contains many methods that are not the part of Collection
framework.
1. import java.util.*;
2. public class TestJavaCollection3{
3. public static void main(String args[]){
4. Vector<String> v=new Vector<String>();
5. v.add("Ayush");
6. v.add("Amit");
7. v.add("Ashish");
8. v.add("Garima");
9. Iterator<String> itr=v.iterator();
10. while(itr.hasNext()){
11. System.out.println(itr.next());
12. }
13. }
14. }
Output:
Ayush
Amit
Ashish
Garima
Stack
The stack is the subclass of Vector. It implements the Last-In-First-Out(LIFO) data
structure, i.e., Stack. The stack contains all of the methods of Vector class and also provides
its methods like boolean push(), boolean peek(), boolean push(object o), which defines its
properties.
1. import java.util.*;
2. public class TestJavaCollection4{
3. public static void main(String args[]){
4. Stack<String> stack = new Stack<String>();
5. stack.push("Ayush");
6. stack.push("Garvit");
7. stack.push("Amit");
8. stack.push("Ashish");
9. stack.push("Garima");
10. stack.pop();
11. Iterator<String> itr=stack.iterator();
12. while(itr.hasNext()){
13. System.out.println(itr.next());
14. }
15. }
16. }
Output:
Ayush
Garvit
Amit
Ashish
Set Interface
Set Interface in Java is present in java.util package. It extends the Collection interface. It
represents the unordered set of elements which doesn't allow us to store the duplicate
items. We can store at most one null value in Set. Set is implemented by HashSet,
LinkedHashSet, and TreeSet.
1. Set<data-type> s1 = new HashSet<data-type>();
2. Set<data-type> s2 = new LinkedHashSet<data-type>();
3. Set<data-type> s3 = new TreeSet<data-type>();
HashSet
HashSet class implements Set Interface. It represents the collection that uses a hash table
for storage. Hashing is used to store the elements in the HashSet. It contains unique items.
1. import java.util.*;
2. public class TestJavaCollection7{
3. public static void main(String args[]){
4. //Creating HashSet and adding elements
5. HashSet<String> set=new HashSet<String>();
6. set.add("Ravi");
7. set.add("Vijay");
8. set.add("Ravi");
9. set.add("Ajay");
10. //Traversing elements
11. Iterator<String> itr=set.iterator();
12. while(itr.hasNext()){
13. System.out.println(itr.next());
14. }
15. }
16. }
Output:
Vijay
Ravi
Ajay
LinkedHashSet
LinkedHashSet class represents the LinkedList implementation of Set Interface. It extends
the HashSet class and implements Set interface. Like HashSet, It also contains unique
elements. It maintains the insertion order and permits null elements.
1. import java.util.*;
2. public class TestJavaCollection8{
3. public static void main(String args[]){
4. LinkedHashSet<String> set=new LinkedHashSet<String>();
5. set.add("Ravi");
6. set.add("Vijay");
7. set.add("Ravi");
8. set.add("Ajay");
9. Iterator<String> itr=set.iterator();
10. while(itr.hasNext()){
11. System.out.println(itr.next());
12. }
13. }
14. }
Output:
Ravi
Vijay
Ajay
SortedSet Interface
SortedSet is the alternate of Set interface that provides a total ordering on its elements.
The elements of the SortedSet are arranged in the increasing (ascending) order. The
SortedSet provides the additional methods that inhibit the natural ordering of the elements.
1. SortedSet<data-type> set = new TreeSet();
NavigableSet in Java with Examples
NavigableSet represents a navigable set in Java Collection Framework. The NavigableSet
interface inherits from the SortedSet interface. It behaves like a SortedSet with the exception
that we have navigation methods available in addition to the sorting mechanisms of the
SortedSet. For example, NavigableSet interface can navigate the set in reverse order compared
to the order defined in SortedSet.
The classes that implement this interface are, TreeSet and ConcurrentSkipListSet
Methods of NavigableSet (Not in SortedSet):
1. Lower(E e) : Returns the greatest element in this set which is less than the given
element or NULL if there is no such element.
2. Floor(E e ) : Returns the greatest element in this set which is less than or equal to given
element or NULL if there is no such element.
3. Ceiling(E e) : Returns the least element in this set which is greater than or equal to given
element or NULL if there is no such element.
4. Higher(E e) : Returns the least element in this set which is greater than the given
element or NULL if there is no such element.
5. pollFirst() : Retrieve and remove the first least element. Or return null if there is no such
element.
6. pollLast() : Retrieve and remove the last highest element. Or return null if there is no
such element.
filter_none
edit
play_arrow
brightness_4
// A Java program to demonstrate working of SortedSet
importjava.util.NavigableSet;
importjava.util.TreeSet;
publicclasshashset
{
publicstaticvoidmain(String[] args)
{
NavigableSet<Integer> ns = newTreeSet<>();
ns.add(0);
ns.add(1);
ns.add(2);
ns.add(3);
ns.add(4);
ns.add(5);
ns.add(6);
// Get a reverse view of the navigable set
NavigableSet<Integer>reverseNs = ns.descendingSet();
// Print the normal and reverse views
System.out.println("Normal order: "+ ns);
System.out.println("Reverse order: "+ reverseNs);
NavigableSet<Integer>threeOrMore = ns.tailSet(3, true);
System.out.println("3 or more: "+ threeOrMore);
System.out.println("lower(3): "+ ns.lower(3));
System.out.println("floor(3): "+ ns.floor(3));
System.out.println("higher(3): "+ ns.higher(3));
System.out.println("ceiling(3): "+ ns.ceiling(3));
System.out.println("pollFirst(): "+ ns.pollFirst());
System.out.println("Navigable Set: "+ ns);
System.out.println("pollLast(): "+ ns.pollLast());
System.out.println("Navigable Set: "+ ns);
System.out.println("pollFirst(): "+ ns.pollFirst());
System.out.println("Navigable Set: "+ ns);
System.out.println("pollFirst(): "+ ns.pollFirst());
System.out.println("Navigable Set: "+ ns);
System.out.println("pollFirst(): "+ ns.pollFirst());
System.out.println("Navigable Set: "+ ns);
System.out.println("pollFirst(): "+ ns.pollFirst());
System.out.println("pollLast(): "+ ns.pollLast());
}
}
Output:
TreeSet
Java TreeSet class implements the Set interface that uses a tree for storage. Like HashSet,
TreeSet also contains unique elements. However, the access and retrieval time of TreeSet is
quite fast. The elements in TreeSet stored in ascending order.
1. import java.util.*;
2. public class TestJavaCollection9{
3. public static void main(String args[]){
4. //Creating and adding elements
5. TreeSet<String> set=new TreeSet<String>();
6. set.add("Ravi");
7. set.add("Vijay");
8. set.add("Ravi");
9. set.add("Ajay");
10. //traversing elements
11. Iterator<String> itr=set.iterator();
12. while(itr.hasNext()){
13. System.out.println(itr.next());
14. }
15. }
16. }
Output:
Ajay
Ravi
Vijay
Queue Interface
Queue interface maintains the first-in-first-out order. It can be defined as an ordered list
that is used to hold the elements which are about to be processed. There are various
classes like PriorityQueue, Deque, and ArrayDeque which implements the Queue interface.
1. Queue<String> q1 = new PriorityQueue();
2. Queue<String> q2 = new ArrayDeque();
There are various classes that implement the Queue interface, some of them are given
below.
PriorityQueue
The PriorityQueue class implements the Queue interface. It holds the elements or objects
which are to be processed by their priorities. PriorityQueue doesn't allow null values to be
stored in the queue.
1. import java.util.*;
2. public class TestJavaCollection5
3. {
4. public static void main(String args[])
5. {
6. PriorityQueue<String> queue=new PriorityQueue<String>();
7. queue.add("Amit Sharma");
8. queue.add("Vijay Raj");
9. queue.add("JaiShankar");
10. queue.add("Raj");
11. System.out.println("head:"+queue.element());
12. System.out.println("head:"+queue.peek());
13. System.out.println("iterating the queue elements:");
14. Iterator itr=queue.iterator();
15. while(itr.hasNext()){
16. System.out.println(itr.next());
17. }
18. queue.remove();
19. queue.poll();
20. System.out.println("after removing two elements:");
21. Iterator<String> itr2=queue.iterator();
22. while(itr2.hasNext())
23. {
24. System.out.println(itr2.next());
25. }
26. }
27. }
Output:
head:Amit Sharma
head:Amit Sharma
iterating the queue elements:
Amit Sharma
Raj
JaiShankar
Vijay Raj
after removing two elements:
Raj
Vijay Raj
Deque Interface
Deque interface extends the Queue interface. In Deque, we can remove and add the
elements from both the side. Deque stands for a double-ended queue which enables us to
perform the operations at both the ends.
1. Deque d = new ArrayDeque();
ArrayDeque
ArrayDeque class implements the Deque interface. It facilitates us to use the Deque. Unlike
queue, we can add or delete the elements from both the ends.
ArrayDeque is faster than ArrayList and Stack and has no capacity restrictions.
1. import java.util.*;
2. public class TestJavaCollection6{
3. public static void main(String[] args) {
4. //Creating Deque and adding elements
5. Deque<String> deque = new ArrayDeque<String>();
6. deque.add("Gautam");
7. deque.add("Karan");
8. deque.add("Ajay");
9. //Traversing elements
10. for (String str : deque) {
11. System.out.println(str);
12. }
13. }
14. }
Output:
Gautam
Karan
Ajay