// part 1
import java.util.ArrayList;
import java.util.List;

public class ListUtils {
    public static List<Integer> getEvenNumbers(List<Integer> numbers) {
        List<Integer> evens = new ArrayList<>();
        for (int i = 0; i < numbers.size(); i++) {
            int num = numbers.get(i);
            if (num % 2 == 0) {
                evens.add(num);
            }
        }
        return evens;
    }
}
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(3);
numbers.add(2);
numbers.add(4);
ListUtils.getEvenNumbers(numbers);

[2, 4]
// part 2
import java.util.HashSet;
import java.util.Set;

public class SetUtils {
    public static Set<Integer> getIntersection(Set<Integer> set1, Set<Integer> set2) {
        Set<Integer> intersection = new HashSet<>();
        for (Integer element : set1) {
            if (set2.contains(element)) {
                intersection.add(element);
            }
        }
        return intersection;
    }
}

Set<Integer> nums = new HashSet<>();
        
nums.add(1);
nums.add(2);
nums.add(3);

Set<Integer> nums2 = new HashSet<>();
        
nums2.add(2);
nums2.add(3);
nums2.add(4);

SetUtils.getIntersection(nums, nums2);
[2, 3]
// part 3
import java.util.ArrayDeque;
import java.util.Deque;

public class DequeDemo {
    public static void simulateLine() {
        Deque<String> line = new ArrayDeque<>();

        line.addLast("Customer1");
        line.addLast("Customer2");
        line.addLast("Customer3");

        line.addFirst("VIP");

        line.removeFirst();

        System.out.println("Front of the line: " + line.peekFirst());
        System.out.println("Back of the line: " + line.peekLast());

        System.out.println("Line size: " + line.size());
    }
}

DequeDemo.simulateLine();
Front of the line: Customer1
Back of the line: Customer3
Line size: 3

part 4:

A hashset would be most efficient for its low O(1) time complexity for the add, remove, and contains methods, and lack of allowed dupes (hashsets cannot have duplicates by default).