Blog about Programming Languages & Coding

Blog about Programming Languages & Coding
Contents for Computer Science, IT, B.Sc. CS & IT, M.Sc. CS & IT, MCA, BE CS & IT, ME CS & IT , Interview Questions, Books and Online Course Recommendations from Udemy, Coursera, etc

Collections in Java


Collections in java is a framework that provides an architecture to store and manipulate the group of objects.

All the operations that you perform on a data such as searching, sorting, insertion, manipulation, deletion etc. can be performed by Java Collections.

Java Collection simply means a single unit of objects. Java Collection framework provides many interfaces (Set, List, Queue, Deque etc.) and classes (ArrayList, Vector, LinkedList, PriorityQueue, HashSet, LinkedHashSet, TreeSet etc).

What is Collection in java

Collection represents a single unit of objects i.e. a group.

What is framework in java

  • provides readymade architecture.
  • represents set of classes and interface.
  • is optional.

What is Collection framework

Collection framework represents a unified architecture for storing and manipulating group of objects. It has:

  1. Interfaces and its implementations i.e. classes
  2. Algorithm

The collections framework was designed to meet several goals, such as −

·         The framework had to be high-performance. The implementations for the fundamental collections (dynamic arrays, linked lists, trees, and hashtables) were to be highly efficient.

·         The framework had to allow different types of collections to work in a similar manner and with a high degree of interoperability.

·         The framework had to extend and/or adapt a collection easily.



Methods of Collection interface

There are many methods declared in the Collection interface. They are as follows:

No.

Method

Description

1

public boolean add(Object element)

is used to insert an element in this collection.

2

public boolean addAll(Collection c)

is used to insert the specified collection elements in the invoking collection.

3

public boolean remove(Object element)

is used to delete an element from this collection.

4

public boolean removeAll(Collection c)

is used to delete all the elements of specified collection from the invoking collection.

5

public boolean retainAll(Collection c)

is used to delete all the elements of invoking collection except the specified collection.

6

public int size()

return the total number of elements in the collection.

7

public void clear()

removes the total no of element from the collection.

8

public boolean contains(Object element)

is used to search an element.

9

public boolean containsAll(Collection c)

is used to search the specified collection in this collection.

10

public Iterator iterator()

returns an iterator.

11

public Object[] toArray()

converts collection into array.

12

public boolean isEmpty()

checks if collection is empty.

13

public boolean equals(Object element)

matches two collection.

14

public int hashCode()

returns the hashcode number for collection.


Iterator interface

Iterator interface provides the facility of iterating the elements in forward direction only.

Methods of Iterator interface

There are only three methods in the Iterator interface. They are:

No.

Method

Description

1

public boolean hasNext()

It returns true if iterator has more elements.

2

public Object next()

It returns the element and moves the cursor pointer to the next element.

3

public void remove()

It removes the last elements returned by the iterator. It is rarely used.

Java - The List Interface

Overview of List collection

Basically, a list collection stores elements by insertion order (either at the end or at a specific position in the list). A list maintains indices of its elements so it allows adding, retrieving, modifying, removing elements by an integer index (zero-based index; the first element is at 0-index, the second at 1-index, the third at 2-index, and so on). The following picture illustrates a list that stores some String elements:

A list can store objects of any types. Primitive types are automatically converted to corresponding wrapper types, e.g. integer numbers are converted to Integer objects. It allows null and duplicate elements, and orders them by their insertion order (index).

The List is the base interface for all list types, and the ArrayList and LinkedList classes are two common List’s implementations.

o    ArrayList : An implementation that stores elements in a backing array. The array’s size will be automatically expanded if there isn’t enough room when adding new elements into the list. It’s possible to set the default size by specifying an initial capacity when creating a new ArrayList.

o    LinkedList : An implementation that stores elements in a doubly-linked list data structure. It offers constant time for adding and removing elements at the end of the list; and linear time for operations at other positions in the list. Therefore, we can consider using a LinkedList if fast adding and removing elements at the end of the list is required.

The following class diagram depicts the inheritance tree of the List collections:

Java ArrayList class

Java ArrayList class uses a dynamic array for storing the elements. It inherits AbstractList class and implements List interface.

The important points about Java ArrayList class are:

  • Java ArrayList class can contain duplicate elements.
  • Java ArrayList class maintains insertion order.
  • Java ArrayList class is non synchronized.
  • Java ArrayList allows random access because array works at the index basis.
  • In Java ArrayList class, manipulation is slow because a lot of shifting needs to be occurred if any element is removed from the array list.

Constructors of Java ArrayList

Constructor

Description

ArrayList()

It is used to build an empty array list.

ArrayList(Collection c)

It is used to build an array list that is initialized with the elements of the collection c.

ArrayList(int capacity)

It is used to build an array list that has the specified initial capacity.

Methods of Java ArrayList

Method

Description

void add(int index, Object element)

It is used to insert the specified element at the specified position index in a list.

boolean addAll(Collection c)

It is used to append all of the elements in the specified collection to the end of this list, in the order that they are returned by the specified collection's iterator.

void clear()

It is used to remove all of the elements from this list.

int lastIndexOf(Object o)

It is used to return the index in this list of the last occurrence of the specified element, or -1 if the list does not contain this element.

Object[] toArray()

It is used to return an array containing all of the elements in this list in the correct order.

Object[] toArray(Object[] a)

It is used to return an array containing all of the elements in this list in the correct order.

boolean add(Object o)

It is used to append the specified element to the end of a list.

boolean addAll(int index, Collection c)

It is used to insert all of the elements in the specified collection into this list, starting at the specified position.

Object clone()

It is used to return a shallow copy of an ArrayList.

int indexOf(Object o)

It is used to return the index in this list of the first occurrence of the specified element, or -1 if the List does not contain this element.

void trimToSize()

It is used to trim the capacity of this ArrayList instance to be the list's current size.

Java Non-generic Vs Generic Collection

Java collection framework was non-generic before JDK 1.5. Since 1.5, it is generic.

Java new generic collection allows you to have only one type of object in collection. Now it is type safe so typecasting is not required at run time.

Let's see the old non-generic example of creating java collection.

  1. ArrayList al=new ArrayList();//creating old non-generic arraylist  

Let's see the new generic example of creating java collection.

  1. ArrayList<String> al=new ArrayList<String>();//creating new generic arraylist  

In generic collection, we specify the type in angular braces. Now ArrayList is forced to have only specified type of objects in it. If you try to add another type of object, it gives compile time error.

Java ArrayList Example

  1. import java.util.*;  
  2. class TestCollection1{  
  3.  public static void main(String args[]){  
  4.   ArrayList<String> list=new ArrayList<String>();//Creating arraylist  
  5.   list.add("Ravi");//Adding object in arraylist  
  6.   list.add("Vijay");  
  7.   list.add("Ravi");  
  8.   list.add("Ajay");  
  9.   //Traversing list through Iterator  
  10.   Iterator itr=list.iterator();  
  11.   while(itr.hasNext()){  
  12.    System.out.println(itr.next());  
  13.   }  
  14.  }  
  15. }  

Two ways to iterate the elements of collection in java

There are two ways to traverse collection elements:

  1. By Iterator interface.
  2. By for-each loop.

In the above example, we have seen traversing ArrayList by Iterator. Let's see the example to traverse ArrayList elements using for-each loop.

Iterating Collection through for-each loop

import java.util.*;  
class TestCollection2{  
 public static void main(String args[]){  
  ArrayList<String> al=new ArrayList<String>();  
  al.add("Ravi");  
  al.add("Vijay");  
  al.add("Ravi");  
  al.add("Ajay");  
  for(String obj:al)  
    System.out.println(obj);  
 }  
}  
Output:
       Ravi
       Vijay
       Ravi
       Ajay

Java LinkedList class

Java LinkedList class uses doubly linked list to store the elements. It provides a linked-list data structure. It inherits the AbstractList class and implements List and Deque interfaces.

The important points about Java LinkedList are:

  • Java LinkedList class can contain duplicate elements.
  • Java LinkedList class maintains insertion order.
  • Java LinkedList class is non synchronized.
  • In Java LinkedList class, manipulation is fast because no shifting needs to be occurred.
  • Java LinkedList class can be used as list, stack or queue.

Hierarchy of LinkedList class

As shown in above diagram, Java LinkedList class extends AbstractSequentialList class and implements List and Deque interfaces.

Doubly Linked List

In case of doubly linked list, we can add or remove elements from both side.

Constructors of Java LinkedList

Constructor

Description

LinkedList()

It is used to construct an empty list.

LinkedList(Collection c)

It is used to construct a list containing the elements of the specified collection, in the order they are returned by the collection's iterator.


Methods of Java LinkedList

Method

Description

void add(int index, Object element)

It is used to insert the specified element at the specified position index in a list.

void addFirst(Object o)

It is used to insert the given element at the beginning of a list.

void addLast(Object o)

It is used to append the given element to the end of a list.

int size()

It is used to return the number of elements in a list

boolean add(Object o)

It is used to append the specified element to the end of a list.

boolean contains(Object o)

It is used to return true if the list contains a specified element.

boolean remove(Object o)

It is used to remove the first occurence of the specified element in a list.

Object getFirst()

It is used to return the first element in a list.

Object getLast()

It is used to return the last element in a list.

int indexOf(Object o)

It is used to return the index in a list of the first occurrence of the specified element, or -1 if the list does not contain any element.

int lastIndexOf(Object o)

It is used to return the index in a list of the last occurrence of the specified element, or -1 if the list does not contain any element.

Java LinkedList Example

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

Difference between ArrayList and LinkedList

ArrayList and LinkedList both implements List interface and maintains insertion order. Both are non synchronized classes.

But there are many differences between ArrayList and LinkedList classes that are given below.

ArrayList

LinkedList

1) ArrayList internally uses dynamic array to store the elements.

LinkedList internally uses doubly linked list to store the elements.

2) Manipulation with ArrayList is slow because it internally uses array. If any element is removed from the array, all the bits are shifted in memory.

Manipulation with LinkedList is faster than ArrayList because it uses doubly linked list so no bit shifting is required in memory.

3) ArrayList class can act as a list only because it implements List only.

LinkedList class can act as a list and queue both because it implements List and Deque interfaces.

4) ArrayList is better for storing and accessing data.

LinkedList is better for manipulating data.

Example

The above interface has been implemented in various classes like ArrayList or LinkedList, etc. Following is the example to explain few methods from various class implementation of the above collection methods −

import java.util.*;
public class CollectionsDemo {
 
   public static void main(String[] args) {
      List a1 = new ArrayList();
      a1.add("Zara");
      a1.add("Mahnaz");
      a1.add("Ayan");      
      System.out.println(" ArrayList Elements");
      System.out.print("\t" + a1);
 
      List l1 = new LinkedList();
      l1.add("Zara");
      l1.add("Mahnaz");
      l1.add("Ayan");
      System.out.println();
      System.out.println(" LinkedList Elements");
      System.out.print("\t" + l1);
   }
}
This will produce the following result −

ArrayList Elements
        [Zara, Mahnaz, Ayan]
 LinkedList Elements
        [Zara, Mahnaz, Ayan]

Java - The Set Interface

A Set is a Collection that cannot contain duplicate elements. It models the mathematical set abstraction.

The Set interface contains only methods inherited from Collection and adds the restriction that duplicate elements are prohibited.

Set also adds a stronger contract on the behavior of the equals and hashCode operations, allowing Set instances to be compared meaningfully even if their implementation types differ.

The methods declared by Set are summarized in the following table −

Sr.No.

Method & Description

1

add( )

Adds an object to the collection.

2

clear( )

Removes all objects from the collection.

3

contains( )

Returns true if a specified object is an element within the collection.

4

isEmpty( )

Returns true if the collection has no elements.

5

iterator( )

Returns an Iterator object for the collection, which may be used to retrieve an object.

6

remove( )

Removes a specified object from the collection.

7

size( )

Returns the number of elements in the collection.

Java HashSet class

Java HashSet class is used to create a collection that uses a hash table for storage. It inherits the AbstractSet class and implements Set interface.

The important points about Java HashSet class are:

  • HashSet stores the elements by using a mechanism called hashing.
  • HashSet contains unique elements only.

Difference between List and Set

List can contain duplicate elements whereas Set contains unique elements only.

Constructors of Java HashSet class:

Constructor

Description

HashSet()

It is used to construct a default HashSet.

HashSet(Collection c)

It is used to initialize the hash set by using the elements of the collection c.

HashSet(int capacity)

It is used to initialize the capacity of the hash set to the given integer value capacity. The capacity grows automatically as elements are added to the HashSet.

Methods of Java HashSet class:

Method

Description

void clear()

It is used to remove all of the elements from this set.

boolean contains(Object o)

It is used to return true if this set contains the specified element.

boolean add(Object o)

It is used to adds the specified element to this set if it is not already present.

boolean isEmpty()

It is used to return true if this set contains no elements.

boolean remove(Object o)

It is used to remove the specified element from this set if it is present.

Object clone()

It is used to return a shallow copy of this HashSet instance: the elements themselves are not cloned.

Iterator iterator()

It is used to return an iterator over the elements in this set.

int size()

It is used to return the number of elements in this set.

Java HashSet Example

1.    import java.util.*;  

2.    class TestCollection9{  

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:

       Ajay

       Vijay

       Ravi

Java LinkedHashSet class

Java LinkedHashSet class is a Hash table and Linked list implementation of the set interface. It inherits HashSet class and implements Set interface.

The important points about Java LinkedHashSet class are:

  • Contains unique elements only like HashSet.
  • Provides all optional set operations, and permits null elements.
  • Maintains insertion order.

Constructors of Java LinkedHashSet class

Constructor

Description

HashSet()

It is used to construct a default HashSet.

HashSet(Collection c)

It is used to initialize the hash set by using the elements of the collection c.

LinkedHashSet(int capacity)

It is used initialize the capacity of the linkedhashset to the given integer value capacity.

LinkedHashSet(int capacity, float fillRatio)

It is used to initialize both the capacity and the fill ratio (also called load capacity) of the hash set from its argument.

Example of LinkedHashSet class:

1.    import java.util.*;  

2.    class TestCollection10{  

3.     public static void main(String args[]){  

4.      LinkedHashSet<String> al=new LinkedHashSet<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. }  

Java TreeSet class

Java TreeSet class implements the Set interface that uses a tree for storage. It inherits AbstractSet class and implements NavigableSet interface. The objects of TreeSet class are stored in ascending order.

The important points about Java TreeSet class are:

  • Contains unique elements only like HashSet.
  • Access and retrieval times are quiet fast.
  • Maintains ascending order.

Constructors of Java TreeSet class

Constructor

Description

TreeSet()

It is used to construct an empty tree set that will be sorted in an ascending order according to the natural order of the tree set.

TreeSet(Collection c)

It is used to build a new tree set that contains the elements of the collection c.

TreeSet(Comparator comp)

It is used to construct an empty tree set that will be sorted according to given comparator.

TreeSet(SortedSet ss)

It is used to build a TreeSet that contains the elements of the given SortedSet.

Methods of Java TreeSet class

Method

Description

boolean addAll(Collection c)

It is used to add all of the elements in the specified collection to this set.

boolean contains(Object o)

It is used to return true if this set contains the specified element.

boolean isEmpty()

It is used to return true if this set contains no elements.

boolean remove(Object o)

It is used to remove the specified element from this set if it is present.

void add(Object o)

It is used to add the specified element to this set if it is not already present.

void clear()

It is used to remove all of the elements from this set.

Object clone()

It is used to return a shallow copy of this TreeSet instance.

Object first()

It is used to return the first (lowest) element currently in this sorted set.

Object last()

It is used to return the last (highest) element currently in this sorted set.

int size()

It is used to return the number of elements in this set.

Java TreeSet Example

1.    import java.util.*;  

2.    class TestCollection11{  

3.     public static void main(String args[]){  

4.      //Creating and adding elements  

5.      TreeSet<String> al=new TreeSet<String>();  

6.      al.add("Ravi");  

7.      al.add("Vijay");  

8.      al.add("Ravi");  

9.      al.add("Ajay");  

10.   //Traversing elements  

11.   Iterator<String> itr=al.iterator();  

12.   while(itr.hasNext()){  

13.    System.out.println(itr.next());  

14.   }  

15.  }  }  

Output:

Ajay

Ravi

Vijay

Example

Set has its implementation in various classes like HashSet, TreeSet, LinkedHashSet. Following is an example to explain Set functionality −

import java.util.*;
public class SetDemo {
 
  publxic static void main(String args[]) { 
      int count[] = {34, 22,10,60,30,22};
      Set<Integer> set = new HashSet<Integer>();
      try {
         for(int i = 0; i < 5; i++) {
            set.add(count[i]);
         }
         System.out.println(set);
 
         TreeSet sortedSet = new TreeSet<Integer>(set);
         System.out.println("The sorted list is:");
         System.out.println(sortedSet);
 
         System.out.println("The First element of the set is: "+ (Integer)sortedSet.first());
         System.out.println("The last element of the set is: "+ (Integer)sortedSet.last());
      }
      catch(Exception e) {}
   }
} 

This will produce the following result −

Output

[34, 22, 10, 60, 30]

The sorted list is:

[10, 22, 30, 34, 60]

The First element of the set is: 10

The last element of the set is: 60

Java - The Map Interface

The Map interface maps unique keys to values. A key is an object that you use to retrieve a value at a later date.

·         Given a key and a value, you can store the value in a Map object. After the value is stored, you can retrieve it by using its key.

·         Several methods throw a NoSuchElementException when no items exist in the invoking map.

·         A ClassCastException is thrown when an object is incompatible with the elements in a map.

·         A NullPointerException is thrown if an attempt is made to use a null object and null is not allowed in the map.

·         An UnsupportedOperationException is thrown when an attempt is made to change an unmodifiable map.

 

Sr.No.

Method & Description

1

void clear( )

Removes all key/value pairs from the invoking map.

2

boolean containsKey(Object k)

Returns true if the invoking map contains k as a key. Otherwise, returns false.

3

boolean containsValue(Object v)

Returns true if the map contains v as a value. Otherwise, returns false.

4

Set entrySet( )

Returns a Set that contains the entries in the map. The set contains objects of type Map.Entry. This method provides a set-view of the invoking map.

5

boolean equals(Object obj)

Returns true if obj is a Map and contains the same entries. Otherwise, returns false.

6

Object get(Object k)

Returns the value associated with the key k.

7

int hashCode( )

Returns the hash code for the invoking map.

8

boolean isEmpty( )

Returns true if the invoking map is empty. Otherwise, returns false.

9

Set keySet( )

Returns a Set that contains the keys in the invoking map. This method provides a set-view of the keys in the invoking map.

10

Object put(Object k, Object v)

Puts an entry in the invoking map, overwriting any previous value associated with the key. The key and value are k and v, respectively. Returns null if the key did not already exist. Otherwise, the previous value linked to the key is returned.

11

void putAll(Map m)

Puts all the entries from m into this map.

12

Object remove(Object k)

Removes the entry whose key equals k.

13

int size( )

Returns the number of key/value pairs in the map.

14

Collection values( )

Returns a collection containing the values in the map. This method provides a collection-view of the values in the map.

Java HashMap class

Java HashMap class implements the map interface by using a hashtable. It inherits AbstractMap class and implements Map interface.

The important points about Java HashMap class are:

  • A HashMap contains values based on the key.
  • It contains only unique elements.
  • It may have one null key and multiple null values.
  • It maintains no order.

Constructors of Java HashMap class

Constructor

Description

HashMap()

It is used to construct a default HashMap.

HashMap(Map m)

It is used to initializes the hash map by using the elements of the given Map object m.

HashMap(int capacity)

It is used to initializes the capacity of the hash map to the given integer value, capacity.

HashMap(int capacity, float fillRatio)

It is used to initialize both the capacity and fill ratio of the hash map by using its arguments.

Methods of Java HashMap class

Method

Description

void clear()

It is used to remove all of the mappings from this map.

boolean containsKey(Object key)

It is used to return true if this map contains a mapping for the specified key.

boolean containsValue(Object value)

It is used to return true if this map maps one or more keys to the specified value.

boolean isEmpty()

It is used to return true if this map contains no key-value mappings.

Object clone()

It is used to return a shallow copy of this HashMap instance: the keys and values themselves are not cloned.

Set entrySet()

It is used to return a collection view of the mappings contained in this map.

Set keySet()

It is used to return a set view of the keys contained in this map.

Object put(Object key, Object value)

It is used to associate the specified value with the specified key in this map.

int size()

It is used to return the number of key-value mappings in this map.

Collection values()

It is used to return a collection view of the values contained in this map.

Java HashMap Example

1.    import java.util.*;  

2.    class TestCollection13{  

3.     public static void main(String args[]){  

4.      HashMap<Integer,String> hm=new HashMap<Integer,String>();  

5.      hm.put(100,"Amit");  

6.      hm.put(101,"Vijay");  

7.      hm.put(102,"Rahul");  

8.      for(Map.Entry m:hm.entrySet()){  

9.       System.out.println(m.getKey()+" "+m.getValue());  

10.   }  

11.  }  

12. }  


Output:102 Rahul

       100 Amit

       101 Vijay

Example

Map has its implementation in various classes like HashMap. Following is an example to explain map functionality −

import java.util.*;
public class CollectionsDemo {
 
   public static void main(String[] args) {
      Map m1 = new HashMap(); 
      m1.put("Zara", "8");
      m1.put("Mahnaz", "31");
      m1.put("Ayan", "12");
      m1.put("Daisy", "14");
 
      System.out.println();
      System.out.println(" Map Elements");
      System.out.print("\t" + m1);
   }
}

This will produce the following result −

Output

Map Elements
            {Daisy = 14, Ayan = 12, Zara = 8, Mahnaz = 31}
Collections in Java  Collections in Java Reviewed by Asst. Prof. Sunita Rai on July 28, 2022 Rating: 5

No comments:

Powered by Blogger.