Prev Next

Java / Java 21 Collection Framework features Interview questions

How does LinkedHashMap's access-order mode interact with SequencedMap methods?

A LinkedHashMap can be constructed with accessOrder = true, which changes its encounter order so that reading an entry via get() moves it to the end, rather than leaving the order fixed at insertion time.

LinkedHashMap<String, Integer> cache =
    new LinkedHashMap<>(16, 0.75f, true); // access-order enabled
cache.put("a", 1);
cache.put("b", 2);
cache.get("a"); // moves "a" to the end
System.out.println(cache.lastEntry()); // a=1

Because firstEntry(), lastEntry(), and reversed() all reflect whatever the current encounter order is, they behave dynamically under access-order mode - the "first" entry can change simply because something was read, not just because something was added or removed.

This access-order behavior is exactly what powers a classic LRU cache pattern: the least-recently-used entry is always firstEntry(), so it can be evicted with pollFirstEntry() whenever the cache needs to shrink.

With access-order enabled, calling get() on a LinkedHashMap entry:
Access-order mode combined with pollFirstEntry() is the basis for implementing:

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