Your Page Title
🔍

    Java Collections Framework

    Java Collections Framework (JCF) provides a set of classes and interfaces for storing and manipulating groups of objects. The framework introduces a new approach to handling collections in Java, offering greater flexibility and performance compared to traditional methods like arrays.


    Why a New Approach?

    Java Collections Framework (JCF) improves upon traditional methods of storing and managing groups of objects by offering:

    • Dynamic Resizing: Collections can grow and shrink as needed.
    • Rich Functionality: Enhanced operations for searching, sorting, and modifying elements.
    • Type Safety: Generics allow only specific types of objects in a collection, reducing runtime errors.

    1. Array of Names and Numbers

    While you can use arrays, ArrayList is preferred for its flexibility.

    Using Array:

    String[] names = {"Alice", "Bob", "Charlie"};
    int[] numbers = {1, 2, 3};
    
    // Accessing elements
    System.out.println(names[0]); // Alice
    System.out.println(numbers[1]); // 2

    Using ArrayList:

    import java.util.ArrayList;
    
    ArrayList<String> namesList = new ArrayList<>();
    namesList.add("Alice");
    namesList.add("Bob");
    namesList.add("Charlie");
    
    // Accessing elements
    System.out.println(namesList.get(0)); // Alice
    System.out.println(namesList.size()); // 3

    2. Maintaining a Stack

    A stack is a LIFO data structure. You can use the Stack class or Deque for stack operations.

    Using Stack:

    import java.util.Stack;
    
    Stack<Integer> stack = new Stack<>();
    stack.push(1);
    stack.push(2);
    stack.push(3);
    
    // Accessing elements
    System.out.println(stack.peek()); // 3 (top element)
    
    // Removing elements
    System.out.println(stack.pop()); // 3
    System.out.println(stack.size()); // 2

    3. Maintaining a Linked List

    A linked list provides efficient insertions and deletions.

    Using LinkedList:

    import java.util.LinkedList;
    
    LinkedList<String> linkedList = new LinkedList<>();
    linkedList.add("A");
    linkedList.add("B");
    linkedList.add("C");
    
    // Inserting elements
    linkedList.addFirst("Start");
    linkedList.addLast("End");
    
    // Accessing elements
    System.out.println(linkedList.get(1)); // B
    
    // Removing elements
    linkedList.remove("C");
    System.out.println(linkedList.size()); // 4

    4. Maintaining a Tree

    A tree structure maintains elements in sorted order. You can use TreeSet or TreeMap.

    Using TreeSet:

    import java.util.TreeSet;
    
    TreeSet<Integer> treeSet = new TreeSet<>();
    treeSet.add(5);
    treeSet.add(1);
    treeSet.add(3);
    
    // Accessing elements
    System.out.println(treeSet); // [1, 3, 5]
    
    // Removing elements
    treeSet.remove(3);
    System.out.println(treeSet); // [1, 5]

    5. Maintaining a HashMap

    A HashMap stores key-value pairs for fast access.

    Using HashMap:

    import java.util.HashMap;
    
    HashMap<String, Integer> map = new HashMap<>();
    map.put("Alice", 25);
    map.put("Bob", 30);
    
    // Accessing values
    int age = map.get("Alice"); // returns 25
    System.out.println(age);
    
    // Checking if a key exists
    System.out.println(map.containsKey("Bob")); // true
    
    // Removing a key-value pair
    map.remove("Bob");
    System.out.println(map); // {Alice=25}

    6. Using the Algorithms

    The Collections class provides utility methods for algorithms.

    Sorting and Searching:

    import java.util.ArrayList;
    import java.util.Collections;
    
    ArrayList<String> list = new ArrayList<>();
    list.add("Charlie");
    list.add("Alice");
    list.add("Bob");
    
    // Sorting the list
    Collections.sort(list);
    System.out.println(list); // [Alice, Bob, Charlie]
    
    // Searching for an element
    int index = Collections.binarySearch(list, "Bob");
    System.out.println(index); // 1

    Summary

    The Java Collections Framework offers various data structures such as ArrayList, LinkedList, Stack, TreeSet, and HashMap, each suited for different use cases. These collections are dynamic, type-safe, and come with built-in methods to simplify operations like sorting, searching, and manipulating elements. Using JCF enhances code efficiency and readability compared to traditional array-based approaches.