Sometimes you keep adding items but only ever want the smallest or largest one next, like the nearest hospital or the top K scores. Sorting the whole list again after every insert is wasteful, while a PriorityQueue gives the top in O(log n) per insert and removal. It shows up in Dijkstra, merging K sorted lists and scheduling problems. Do not expect it to iterate in sorted order; only poll returns elements in priority order.