Co-Authored-By: Claude Sonnet 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01KqJyCidz3ZgRyHABv2GVJh
1.6 KiB
1.6 KiB
collections
Companion code for the ankurm.com post "How to Sort a HashMap by Value (and Key) in Java."
Module collections in java-core-examples.
All explanation lives in the post; this module holds the runnable evidence and the captured output.
Versions
| Component | Version |
|---|---|
| JDK | 25.0.4.1+1 (Temurin, LTS) |
| JMH | 1.37 |
| JUnit Jupiter | 5.11.0 |
| Hardware | 2 vCPU x86-64 VM, shared with other jobs (timings are indicative, not a leaderboard) |
Quickstart
export JDK25_HOME=/path/to/jdk-25
./scripts/run-all.sh # rebuilds and regenerates everything in output/
What is in here
| File | Shows | Output |
|---|---|---|
SortByValueDemo |
stream into LinkedHashMap, descending, by key, list of entries, the toMap() default-HashMap trap, tie-break |
01 |
TieBugDemo |
a TreeMap with a value-only comparator silently drops equal values; the tie-break fix |
02 |
TopNDemo |
top-N by sort+limit and by a size-N PriorityQueue |
03 |
SequencedDemo |
JDK 21+ reversed(), firstEntry(), putLast(), live-view behaviour |
04 |
src/broken/*.java |
HashMap has no firstEntry(); Collections.sort(map) does not compile; javac's real message is captured |
05-06 |
SortingBenchmark |
JMH: sort-all vs heap top-10 at 1,000 and 100,000 entries; full sort into LinkedHashMap |
07 |
SortingTest |
6 assertions behind the claims above | 08 |
The JMH run is 2 forks, 3 warmup and 5 measurement iterations of 2 s per fork. The sandbox it ran on was shared with other jobs, so re-running moves the numbers by tens of percent but not the ordering.