Prev Next

Java / Java 21 Collection Framework features Interview questions

Explain the execution flow of putFirst() on a LinkedHashMap?

Internally, LinkedHashMap maintains a doubly linked list threaded through its entries in addition to the usual hash table, and that linked list is what actually defines the map's encounter order.

sequenceDiagram
    participant Caller
    participant LinkedHashMap
    participant HashTable
    participant LinkedList as Internal Linked List
    Caller->>LinkedHashMap: putFirst(key, value)
    LinkedHashMap->>HashTable: Check if key exists
    alt Key exists
        LinkedHashMap->>LinkedList: Unlink existing entry
    end
    LinkedHashMap->>HashTable: Insert/update key-value pair
    LinkedHashMap->>LinkedList: Link entry at the head
    LinkedList-->>LinkedHashMap: Head pointer updated
    LinkedHashMap-->>Caller: Return previous value or null

If the key already existed somewhere in the map, its old node is first unlinked from wherever it sat in the linked list; if it's new, a fresh node is created. Either way, the node is then linked in at the head of that internal list, which is what makes it the new "first" entry for iteration and for firstEntry().

The hash table itself is used only for the O(1) key lookup - the actual iteration order that firstEntry(), lastEntry(), and reversed() rely on comes entirely from the linked list, not from hash bucket order.

LinkedHashMap's iteration order is determined by:
When putFirst() is called on an existing key, the entry is:

More Related questions...

What is the Sequenced Collections feature introduced in Java 21? What is the SequencedCollection interface? What is the SequencedSet interface? What is the SequencedMap interface? What are the new methods added by the SequencedCollection interface? What is the purpose of the reversed() method in Java 21 collections? Define encounter order in the context of Sequenced Collections? What are getFirst() and getLast() used for? What are addFirst() and addLast() used for? What are removeFirst() and removeLast() used for? List the collection classes that implement SequencedCollection in Java 21? List the collection classes that implement SequencedSet in Java 21? List the collection classes that implement SequencedMap in Java 21? What are firstEntry() and lastEntry() in SequencedMap? What are putFirst() and putLast() in SequencedMap? What are pollFirstEntry() and pollLastEntry()? Describe the sequencedKeySet(), sequencedValues(), and sequencedEntrySet() methods? How do you use getFirst() and getLast() on an ArrayList in Java 21? How do you apply reversed() to a List in Java 21? How do you use putFirst() on a LinkedHashMap? Why was the Sequenced Collections API introduced in Java 21? Why doesn't HashSet implement SequencedSet? Why doesn't HashMap implement SequencedMap? How does SequencedSet differ from a plain LinkedHashSet used before Java 21? How does TreeSet implement SequencedSet given its natural ordering? How does TreeMap support SequencedMap given its comparator-based ordering? What is the difference between SequencedCollection and List? What is the difference between SequencedSet and NavigableSet? What is the difference between List.reversed() and Collections.reverse()? What is the difference between removeFirst()/removeLast() on SequencedCollection and on Deque? When should you choose SequencedMap over a regular Map? When would you choose getFirst() over get(0) on a List? What happens when you call getFirst() on an empty SequencedCollection? What happens when you call reversed() on an immutable List returned by List.of()? What happens when you modify the original collection after calling reversed() on it? How is the encounter order of a LinkedHashSet determined when using SequencedSet methods? How does LinkedHashMap's access-order mode interact with SequencedMap methods? Why doesn't Set.of() return a SequencedSet? Which is better and why: getFirst() or peekFirst() on an ArrayDeque? How can you optimize iteration and access using SequencedCollection methods instead of manual indexing? How can you optimize a producer-consumer pattern using ArrayDeque's sequenced methods? How do you troubleshoot a NoSuchElementException thrown from a sequenced collection method? How do you troubleshoot UnsupportedOperationException when calling addFirst() on an unmodifiable list? Explain the internal working of the reversed() view for a List? Explain the lifecycle of a view returned by SequencedMap.reversed()? Explain the execution flow of putFirst() on a LinkedHashMap? Explain the internal working of the retrofit strategy used to add Sequenced interfaces without breaking existing implementations? Why is Deque now classified as a SequencedCollection? What is the difference between SequencedCollection and the Queue interface? Explain how record patterns in Java 21 complement processing elements of sequenced collections?
Show more question and Answers...


Comments & Discussions