Adding Elements at the Beginning of Java ArrayList and Fixed-Size Queue Implementation

Nov 16, 2025 · Programming · 8 views · 7.8

Keywords: Java | ArrayList | Queue Implementation | Element Addition | Fixed Size

Abstract: This article provides an in-depth exploration of various methods for adding elements at the beginning of Java ArrayList, with detailed analysis of the add(int index, E element) method and its time complexity. It presents two main approaches for implementing fixed-size queues: manual management using ArrayList and utilizing Apache Commons Collections' CircularFifoQueue. Complete code examples demonstrate practical implementations, accompanied by comprehensive performance comparisons and scenario-based recommendations.

Overview of ArrayList Element Addition Methods

Java ArrayList is a list structure implemented based on dynamic arrays, providing flexible element manipulation capabilities. In standard usage, ArrayList supports two primary methods for adding elements:

Basic Addition Methods

ArrayList provides the add(E element) method, which appends elements to the end of the list. This method has a time complexity of O(1) and demonstrates high efficiency in average cases. Example code:

ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
System.out.println(list); // Output: [1, 2, 3]

Adding Elements at Specific Positions

For more flexible element insertion, ArrayList provides the add(int index, E element) method. This method allows insertion at specified index positions, with existing elements automatically shifting backward. Specifically, to add elements at the beginning of the list, use index 0:

ArrayList<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add(0, "C"); // Insert element at beginning
System.out.println(list); // Output: [C, A, B]

It's important to note that inserting elements at the beginning has a time complexity of O(n), as all existing elements need to be shifted one position backward. When dealing with large lists, this operation may impact performance.

Fixed-Size Queue Implementation

In practical applications, there's often a need to implement fixed-size queues that automatically remove the oldest elements when full. Here are two main implementation approaches:

Manual Management Using ArrayList

By combining add(0, element) with conditional removal operations, a fixed-size queue can be constructed:

public class FixedSizeQueue<E> {
    private ArrayList<E> list;
    private int maxSize;
    
    public FixedSizeQueue(int maxSize) {
        this.list = new ArrayList<>();
        this.maxSize = maxSize;
    }
    
    public void addToFront(E element) {
        list.add(0, element);
        if (list.size() > maxSize) {
            list.remove(list.size() - 1);
        }
    }
    
    public ArrayList<E> getList() {
        return new ArrayList<>(list);
    }
}

// Usage example
FixedSizeQueue<String> queue = new FixedSizeQueue<>(3);
queue.addToFront("A");
queue.addToFront("B");
queue.addToFront("C");
queue.addToFront("D"); // Automatically removes oldest element "A"
System.out.println(queue.getList()); // Output: [D, C, B]

Using CircularFifoQueue

The Apache Commons Collections library provides the CircularFifoQueue class, specifically designed for implementing fixed-size first-in-first-out queues:

import org.apache.commons.collections4.queue.CircularFifoQueue;

CircularFifoQueue<String> queue = new CircularFifoQueue<>(3);
queue.add("A");
queue.add("B");
queue.add("C");
queue.add("D"); // Automatically removes oldest element "A"
System.out.println(queue); // Output: [B, C, D]

Performance Analysis and Selection Recommendations

When choosing an implementation approach, consider the following factors:

ArrayList Approach:

CircularFifoQueue Approach:

Exception Handling and Best Practices

When using the add(int index, E element) method, pay attention to index boundary checking. If the provided index is less than 0 or greater than the current list size, an IndexOutOfBoundsException will be thrown. Therefore, appropriate exception handling should be implemented in practical applications:

public void safeAddToFront(ArrayList<E> list, E element) {
    try {
        list.add(0, element);
    } catch (IndexOutOfBoundsException e) {
        System.err.println("Invalid index position: " + e.getMessage());
    }
}

Conclusion

There are multiple approaches to implementing fixed-size queues in Java, each with its suitable application scenarios. For simple requirements, manual management using ArrayList is a viable option; for high-performance scenarios, specialized queue implementations like CircularFifoQueue are recommended. Developers should choose the most appropriate solution based on specific performance requirements and project constraints.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.