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
*/