Java : AbstractList with Examples

AbstractList (Java SE 18 & JDK 18) API Examples.
You will find code examples on most AbstractList methods.


Summary

This class provides a skeletal implementation of the List interface to minimize the effort required to implement this interface backed by a "random access" data store (such as an array).

Class diagram

class MyList extends AbstractList<String> {
    private final String[] values;

    MyList(String[] values) {
        this.values = Objects.requireNonNull(values);
    }

    @Override
    public String get(int index) {
        return values[index];
    }

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

final var list = new MyList(new String[]{"aaa", "bbb", "ccc"});
System.out.println(list); // [aaa, bbb, ccc]
System.out.println(list.size()); // 3
System.out.println(list.isEmpty()); // false

System.out.println("-- values --");
for (final var value : list) {
    System.out.println(value);
}

// Result
// ↓
//-- values --
//aaa
//bbb
//ccc

Fields

protected int modCount

The number of times this list has been structurally modified.

class MyList extends AbstractList<String> {
    private final int MAX_SIZE = 5;
    private final String[] values = new String[MAX_SIZE];
    private int size;

    @Override
    public String get(int index) {
        return values[index];
    }

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

    @Override
    public boolean add(String s) {
        if (size == MAX_SIZE) {
            throw new IllegalStateException();
        }

        size++;
        modCount++;
        values[size - 1] = s;
        return true;
    }
}

final var list = new MyList();
list.add("aaa");
list.add("bbb");

{
    final var iterator = list.iterator();
    System.out.println("-- iterator --");
    iterator.forEachRemaining(s -> {
        System.out.println(s);
    });

    // Result
    // ↓
    //-- iterator --
    //aaa
    //bbb
}

{
    final var iterator = list.iterator();

    list.add("ccc");

    try {
        System.out.println("-- iterator --");
        iterator.forEachRemaining(s -> {
            System.out.println(s);
        });
    } catch (ConcurrentModificationException e) {
        System.out.println("ConcurrentModificationException!");
    }

    // Result
    // ↓
    //-- iterator --
    //ConcurrentModificationException!
}

Constructors

AbstractList ()

Sole constructor.

class MyList extends AbstractList<String> {
    private final String[] values;

    MyList(String[] values) {
        this.values = Objects.requireNonNull(values);
    }

    @Override
    public String get(int index) {
        return values[index];
    }

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

final var list = new MyList(new String[]{"aaa", "bbb", "ccc"});
System.out.println(list); // [aaa, bbb, ccc]
System.out.println(list.size()); // 3
System.out.println(list.isEmpty()); // false

System.out.println("-- values --");
for (final var value : list) {
    System.out.println(value);
}

// Result
// ↓
//-- values --
//aaa
//bbb
//ccc

Methods

void add (int index, E element)

Inserts the specified element at the specified position in this list (optional operation).

final var src = List.of("a", "b", "c");
System.out.println(src); // [a, b, c]

{
    final AbstractList<String> list = new ArrayList<>(src);
    System.out.println(list); // [a, b, c]

    list.add(0, "A");
    System.out.println(list); // [A, a, b, c]
}
{
    final AbstractList<String> list = new ArrayList<>(src);
    System.out.println(list); // [a, b, c]

    list.add(1, "B");
    System.out.println(list); // [a, B, b, c]
}
{
    final AbstractList<String> list = new ArrayList<>(src);
    System.out.println(list); // [a, b, c]

    list.add(2, "C");
    System.out.println(list); // [a, b, C, c]
}
{
    final AbstractList<String> list = new ArrayList<>(src);
    System.out.println(list); // [a, b, c]

    list.add(3, "D");
    System.out.println(list); // [a, b, c, D]
}
{
    final AbstractList<String> list = new ArrayList<>(src);
    System.out.println(list); // [a, b, c]

    //list.add(4, "D"); // IndexOutOfBoundsException
}

boolean add (E e)

Appends the specified element to the end of this list (optional operation).

final AbstractList<String> list = new ArrayList<>();
System.out.println(list); // []

System.out.println(list.add("a")); // true
System.out.println(list); // [a]

System.out.println(list.add("b")); // true
System.out.println(list); // [a, b]

System.out.println(list.add("c")); // true
System.out.println(list); // [a, b, c]

boolean addAll (int index, Collection<? extends E> c)

Inserts all of the elements in the specified collection into this list at the specified position (optional operation).

final var src = List.of("a", "b", "c");
System.out.println(src); // [a, b, c]

{
    final AbstractList<String> list = new ArrayList<>(src);
    System.out.println(list); // [a, b, c]

    System.out.println(list.addAll(0, List.of("A1", "A2"))); // true
    System.out.println(list); // [A1, A2, a, b, c]
}
{
    final AbstractList<String> list = new ArrayList<>(src);
    System.out.println(list); // [a, b, c]

    System.out.println(list.addAll(1, List.of("B1", "B2", "B3"))); // true
    System.out.println(list); // [a, B1, B2, B3, b, c]
}
{
    final AbstractList<String> list = new ArrayList<>(src);
    System.out.println(list); // [a, b, c]

    System.out.println(list.addAll(2, List.of("C1", "C2", "C3", "C4"))); // true
    System.out.println(list); // [a, b, C1, C2, C3, C4, c]
}
{
    final AbstractList<String> list = new ArrayList<>(src);
    System.out.println(list); // [a, b, c]

    System.out.println(list.addAll(3, List.of())); // false
    System.out.println(list); // [a, b, c]
}
{
    final AbstractList<String> list = new ArrayList<>(src);
    System.out.println(list); // [a, b, c]

    //list.addAll(4, List.of("E")); // IndexOutOfBoundsException
}
final var src = List.of("a", "b", "c");
System.out.println(src);// [a, b, c]

final AbstractList<String> list = new ArrayList<>(src);

System.out.println(list.addAll(3, Set.of("D1", "D2", "D3"))); // true
System.out.println(list); // [a, b, c, D3, D2, D1]

void clear ()

Removes all of the elements from this list (optional operation).

final AbstractList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");

System.out.println(list); // [a, b, c]

list.clear();
System.out.println(list); // []

boolean equals (Object o)

Compares the specified object with this list for equality.

final AbstractList<String> list = new ArrayList<>();
Collections.addAll(list, "a", "b", "c");
System.out.println(list); // [a, b, c]

System.out.println(list.equals(List.of("a"))); // false
System.out.println(list.equals(List.of("a", "b"))); // false
System.out.println(list.equals(List.of("a", "b", "c"))); // true
System.out.println(list.equals(List.of("c", "b", "a"))); // false
final AbstractList<String> list = new ArrayList<>();
Collections.addAll(list, "a", "b", "c");
System.out.println(list); // [a, b, c]

final var arrayList = new ArrayList<>(list);
System.out.println(arrayList); // [a, b, c]
System.out.println(list.equals(arrayList)); // true

final var linkedList = new LinkedList<>(list);
System.out.println(linkedList); // [a, b, c]
System.out.println(list.equals(linkedList)); // true
final AbstractList<String> list = new ArrayList<>();
Collections.addAll(list, "a", "b", "c");
System.out.println(list); // [a, b, c]

final var set = new LinkedHashSet<>();
set.add("a");
set.add("b");
set.add("c");

System.out.println(set); // [a, b, c]
System.out.println(list.equals(set)); // false

abstract E get (int index)

Returns the element at the specified position in this list.

final AbstractList<String> list = new ArrayList<>();
Collections.addAll(list, "a", "b", "c");
System.out.println(list); // [a, b, c]

//list.get(-1); // IndexOutOfBoundsException
System.out.println(list.get(0)); // a
System.out.println(list.get(1)); // b
System.out.println(list.get(2)); // c
//list.get(3); // IndexOutOfBoundsException
final AbstractList<Integer> list = new ArrayList<>();
Collections.addAll(list, 10, 20, 30, 40);
System.out.println(list); // [10, 20, 30, 40]

System.out.println(list.get(0)); // 10
System.out.println(list.get(1)); // 20
System.out.println(list.get(2)); // 30
System.out.println(list.get(3)); // 40

int hashCode ()

Returns the hash code value for this list.

final AbstractList<String> list1 = new ArrayList<>();
Collections.addAll(list1, "a", "b", "c");
System.out.println(list1.hashCode()); // 126145

final AbstractList<String> list2 = new ArrayList<>();
Collections.addAll(list2, "A", "B", "C");
System.out.println(list2.hashCode()); // 94369

final AbstractList<Integer> list3 = new ArrayList<>();
Collections.addAll(list3, 1, 2, 3);
System.out.println(list3.hashCode()); // 30817

int indexOf (Object o)

Returns the index of the first occurrence of the specified element in this list, or -1 if this list does not contain the element.

final AbstractList<String> list = new ArrayList<>();
Collections.addAll(list, "a", "b", "c", "a", "b", "c");
System.out.println(list); // [a, b, c, a, b, c]

System.out.println(list.indexOf("")); // -1
System.out.println(list.indexOf("a")); // 0
System.out.println(list.indexOf("b")); // 1
System.out.println(list.indexOf("c")); // 2
System.out.println(list.indexOf("d")); // -1
System.out.println(list.indexOf("abc")); // -1

Iterator<E> iterator ()

Returns an iterator over the elements in this list in proper sequence.

final AbstractList<String> list = new ArrayList<>();
Collections.addAll(list, "aaa", "bbb", "ccc");
System.out.println(list); // [aaa, bbb, ccc]

final var iterator = list.iterator();
iterator.forEachRemaining(System.out::println);

// Result
// ↓
//aaa
//bbb
//ccc

int lastIndexOf (Object o)

Returns the index of the last occurrence of the specified element in this list, or -1 if this list does not contain the element.

final AbstractList<String> list = new ArrayList<>();
Collections.addAll(list, "a", "b", "c", "a", "b", "c");
System.out.println(list); // [a, b, c, a, b, c]

System.out.println(list.lastIndexOf("")); // -1
System.out.println(list.lastIndexOf("a")); // 3
System.out.println(list.lastIndexOf("b")); // 4
System.out.println(list.lastIndexOf("c")); // 5
System.out.println(list.lastIndexOf("d")); // -1
System.out.println(list.lastIndexOf("abc")); // -1

ListIterator<E> listIterator ()

Returns a list iterator over the elements in this list (in proper sequence).

final AbstractList<String> list = new ArrayList<>();
Collections.addAll(list, "aaa", "bbb", "ccc");
System.out.println(list); // [aaa, bbb, ccc]

final var listIterator = list.listIterator();
listIterator.forEachRemaining(System.out::println);

// Result
// ↓
//aaa
//bbb
//ccc

ListIterator<E> listIterator (int index)

Returns a list iterator over the elements in this list (in proper sequence), starting at the specified position in the list.

final AbstractList<String> list = new ArrayList<>();
Collections.addAll(list, "aaa", "bbb", "ccc");
System.out.println(list); // [aaa, bbb, ccc]

{
    final var ret = list.listIterator(0);
    ret.forEachRemaining(System.out::println);

    // Result
    // ↓
    //aaa
    //bbb
    //ccc
}
{
    final var ret = list.listIterator(1);
    ret.forEachRemaining(System.out::println);

    // Result
    // ↓
    //bbb
    //ccc
}
{
    final var ret = list.listIterator(2);
    ret.forEachRemaining(System.out::println);

    // Result
    // ↓
    //ccc
}

E remove (int index)

Removes the element at the specified position in this list (optional operation).

final var src = List.of("a", "b", "c");
System.out.println(src); // [a, b, c]

{
    final AbstractList<String> list = new ArrayList<>(src);
    System.out.println(list); // [a, b, c]

    System.out.println(list.remove(0)); // a
    System.out.println(list); // [b, c]
}
{
    final AbstractList<String> list = new ArrayList<>(src);
    System.out.println(list); // [a, b, c]

    System.out.println(list.remove(1)); // b
    System.out.println(list); // [a, c]
}
{
    final AbstractList<String> list = new ArrayList<>(src);
    System.out.println(list); // [a, b, c]

    System.out.println(list.remove(2)); // c
    System.out.println(list); // [a, b]
}
{
    final AbstractList<String> list = new ArrayList<>(src);
    System.out.println(list); // [a, b, c]

    //list.remove(3); // IndexOutOfBoundsException
}

protected void removeRange (int fromIndex, int toIndex)

Removes from this list all of the elements whose index is between fromIndex, inclusive, and toIndex, exclusive.

class MyList extends ArrayList<String> {

    MyList(Collection<String> c) {
        super(c);
    }

    @Override
    public void removeRange(int fromIndex, int toIndex) {
        super.removeRange(fromIndex, toIndex);
    }
}

final var src = List.of("a", "b", "c");
System.out.println(src); // [a, b, c]

{
    final var list = new MyList(src);
    System.out.println(list); // [a, b, c]

    list.removeRange(0, 1);
    System.out.println(list); // [b, c]
}
{
    final var list = new MyList(src);
    System.out.println(list); // [a, b, c]

    list.removeRange(0, 2);
    System.out.println(list); // [c]
}
{
    final var list = new MyList(src);
    System.out.println(list); // [a, b, c]

    list.removeRange(0, 3);
    System.out.println(list); // []
}

{
    final var list = new MyList(src);
    System.out.println(list); // [a, b, c]

    list.removeRange(1, 3);
    System.out.println(list); // [a]
}
{
    final var list = new MyList(src);
    System.out.println(list); // [a, b, c]

    list.removeRange(2, 3);
    System.out.println(list); // [a, b]
}
{
    final var list = new MyList(src);
    System.out.println(list); // [a, b, c]

    list.removeRange(3, 3);
    System.out.println(list); // [a, b, c]
}

E set (int index, E element)

Replaces the element at the specified position in this list with the specified element (optional operation).

final var src = List.of("a", "b", "c");
System.out.println(src); // [a, b, c]

{
    final AbstractList<String> list = new ArrayList<>(src);
    System.out.println(list); // [a, b, c]

    System.out.println(list.set(0, "A")); // a
    System.out.println(list); // [A, b, c]
}
{
    final AbstractList<String> list = new ArrayList<>(src);
    System.out.println(list); // [a, b, c]

    System.out.println(list.set(1, "B")); // b
    System.out.println(list); // [a, B, c]
}
{
    final AbstractList<String> list = new ArrayList<>(src);
    System.out.println(list); // [a, b, c]

    System.out.println(list.set(2, "C")); // c
    System.out.println(list); // [a, b, C]
}
{
    final AbstractList<String> list = new ArrayList<>(src);
    System.out.println(list); // [a, b, c]

    //list.set(3, "D"); // IndexOutOfBoundsException
}

List<E> subList (int fromIndex, int toIndex)

Returns a view of the portion of this list between the specified fromIndex, inclusive, and toIndex, exclusive.

final AbstractList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");

System.out.println(list); // [a, b, c, d]

System.out.println(list.subList(0, 0)); // []
System.out.println(list.subList(0, 1)); // [a]
System.out.println(list.subList(0, 2)); // [a, b]
System.out.println(list.subList(0, 3)); // [a, b, c]
System.out.println(list.subList(0, 4)); // [a, b, c, d]
//list.subList(0, 5); // IndexOutOfBoundsException

final var subList = list.subList(1, 3);
System.out.println(subList); // [b, c]
System.out.println(list); // [a, b, c, d]

subList.set(0, "X");
System.out.println(subList); // [X, c]
System.out.println(list); // [a, X, c, d]

subList.add("Y");
System.out.println(subList); // [X, c, Y]
System.out.println(list); // [a, X, c, Y, d]

subList.remove("c");
System.out.println(subList); // [X, Y]
System.out.println(list); // [a, X, Y, d]

Methods declared in AbstractCollection

addAll, contains, containsAll, isEmpty, remove, removeAll, retainAll, toArray, toArray, toString

Please see the link below.

Methods declared in Collection

parallelStream, removeIf, stream, toArray

Please see the link below.

Methods declared in Iterable

forEach

Please see the link below.

Methods declared in List

addAll, contains, containsAll, isEmpty, remove, removeAll, replaceAll, retainAll, size, sort, spliterator, toArray, toArray

Please see the link below.


Related posts

To top of page