Implementing custom collection classes.

Creating custom collection classes in Java involves defining classes that implement the core collection interfaces (List, Set, Map, etc.) or extending existing collection classes to add custom behavior or constraints. Let’s create custom implementations for a List and a Set that store student names, focusing on simplicity and basic functionality.

Here’s a simple custom implementation of a list (CustomStudentList) that stores student names:

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Set;

class CustomStudentList implements List<String> {

    private final List<String> students;

    public CustomStudentList() {
        this.students = new ArrayList<>();
    }

    @Override
    public int size() {
        return students.size();
    }

    @Override
    public boolean isEmpty() {
        return students.isEmpty();
    }

    @Override
    public boolean contains(Object o) {
        return students.contains(o);
    }

    @Override
    public Iterator<String> iterator() {
        return students.iterator();
    }

    @Override
    public Object[] toArray() {
        return students.toArray();
    }

    @Override
    public <T> T[] toArray(T[] ts) {
        return students.toArray(ts);
    }

    @Override
    public boolean add(String s) {
        return students.add(s);
    }

    @Override
    public boolean remove(Object o) {
        return students.remove(o);
    }

    @Override
    public boolean containsAll(Collection<?> collection) {
        return students.containsAll(collection);
    }

    @Override
    public boolean addAll(Collection<? extends String> collection) {
        return students.addAll(collection);
    }

    @Override
    public boolean addAll(int i, Collection<? extends String> collection) {
        return students.addAll(i, collection);
    }

    @Override
    public boolean removeAll(Collection<?> collection) {
        return students.removeAll(collection);
    }

    @Override
    public boolean retainAll(Collection<?> collection) {
        return students.retainAll(collection);
    }

    @Override
    public void clear() {
        students.clear();
    }

    @Override
    public String get(int i) {
        return students.get(i);
    }

    @Override
    public String set(int i, String s) {
        return students.set(i, s);
    }

    @Override
    public void add(int i, String s) {
        students.add(i, s);
    }

    @Override
    public String remove(int i) {
        return students.remove(i);
    }

    @Override
    public int indexOf(Object o) {
        return students.indexOf(o);
    }

    @Override
    public int lastIndexOf(Object o) {
        return students.lastIndexOf(o);
    }

    @Override
    public ListIterator<String> listIterator() {
        return students.listIterator();
    }

    @Override
    public ListIterator<String> listIterator(int index) {
        return students.listIterator(index);
    }

    @Override
    public List<String> subList(int i, int i1) {
        return students.subList(i, i1);
    }
}

class CustomStudentSet implements Set<String> {

    private final Set<String> students;

    public CustomStudentSet() {
        this.students = new HashSet<>();
    }

    @Override
    public int size() {
        return students.size();
    }

    @Override
    public boolean isEmpty() {
        return students.isEmpty();
    }

    @Override
    public boolean contains(Object o) {
        return students.contains(o);
    }

    @Override
    public Iterator<String> iterator() {
        return students.iterator();
    }

    @Override
    public Object[] toArray() {
        return students.toArray();
    }

    @Override
    public <T> T[] toArray(T[] ts) {
        return students.toArray(ts);
    }

    @Override
    public boolean add(String s) {
        return students.add(s);
    }

    @Override
    public boolean remove(Object o) {
        return students.remove(o);
    }

    @Override
    public boolean containsAll(Collection<?> collection) {
        return students.containsAll(collection);
    }

    @Override
    public boolean addAll(Collection<? extends String> collection) {
        return students.addAll(collection);
    }

    @Override
    public boolean retainAll(Collection<?> collection) {
        return students.retainAll(collection);
    }

    @Override
    public boolean removeAll(Collection<?> collection) {
        return students.removeAll(collection);
    }

    @Override
    public void clear() {
        students.clear();
    }
}

public class CustomCollectionExample {

    public static void main(String[] args) {
        // Using CustomStudentList
        List<String> studentList = new CustomStudentList();
        studentList.add("Paani");
        studentList.add("Mahesh");
        studentList.add("Datta");

        System.out.println("Student List:");
        for (String student : studentList) {
            System.out.println(student);
        }

        // Using CustomStudentSet
        Set<String> studentSet = new CustomStudentSet();
        studentSet.add("Ganesh");
        studentSet.add("Harsha");
        studentSet.add("Paani"); // Duplicate will not be added

        System.out.println("\nStudent Set:");
        for (String student : studentSet) {
            System.out.println(student);
        }
    }
}

/*
D:\javaplanet\Collection Framework>javac CustomCollectionExample.java

D:\javaplanet\Collection Framework>java CustomCollectionExample
Student List:
Paani
Mahesh
Datta

Student Set:
Ganesh
Harsha
Paani
*/
Scroll to Top