Custom Collection Implementations

So far you have learnt about the Java built-in Collection Interfaces implementations.

Custom Collection Implementations


So far you have learnt about the Java  built-in Collection Interfaces implementations. Apart from these, some times programmer need to implement their own collections classes.  The Java platform allows you to write your own implementation of a core collection interface. It is easy to write your own  implementation with the help of abstract implementations

Lets discuss, why we should make a custom implementation.

  • Persistent: All of the built-in Collection implementations reside in main memory and appears when the program exits. If you want a collection to be available for the next time when the program starts, you can implement a collection that is concurrently accessible by multiple programs.
  • High-performance, special-purpose: Many data structures take advantage of restricted usage to offer better performance that is possible with general-purpose implementations. For instance, consider a List containing long runs of identical element values. The runs can be represented as a single object containing the repeated element. This example is interesting because it deals with two aspects of performance: It requires less space but more time than an ArrayList.
  • High-performance, general-purpose: The Java Collections Framework's designers have tried to provide the best general-purpose implementations for each interface, but many, new ones are invented every day for the High performance of an application.
  • Convenience: Some times you want additional implementations that offers conveniences than those offered by the Java platform. For instance, you may need a List to represent a contiguous range of Integers.

To write your own custom implementation is not difficult. Java supports the abstract implementations to implement your own collection. Lets see the way of writing the custom collection implementation.

import java.util.*;

  class MyClass {
    public static List myList(Object[] a) {
       return new ArrayList(a);
    class ArrayList extends AbstractList
               implements {
  private Object[] x;

  ArrayList(Object[] array) {
      x = array;
  public Object get(int index) {
      return x[index];
  public Object set(int index, Object element) {
      Object oldVal = x[index];
      x[index] = element;
      return oldVal;
  public int size() {
      return x.length;
  public class CustomImpl{
   public static void main(String[] args) {
      String s[]={"My", "Custom", "Implementation"};
      Object o;
      int i=0;
      MyClass a= new MyClass();
      List lst=a.myList(s);
      System.out.println("The list is: "+lst);
      ArrayList al=new ArrayList(s);
      System.out.println("The retrieved element is: "+o);
      String s1="Collection";
      System.out.println("The set element in place of Implementation is: "+s1);
      System.out.println("Now the new list is: "+lst);
      System.out.println("The size of the array list is: "+i);
      catch(Exception e){}

Output of the Program:


C:\nisha>java CustomImpl
The list is: [My, Custom, Implementation]
The retrieved element is: Custom
The set element in place of Implementation is: Collection
Now the new list is: [My, Custom, Collection]
The size of the array list is: 3


Description of the Program:

In the given program, a custom implementation of Arrays.myList is defined which calls the constructor of ArrayList class and pass the object to it. The get( ) and the set( ) methods of the ArrayList class retrieve and set an element to the specified position of the List.

Download this Program