These arraymaps are good for block-indexed tables, since the array head is small (<1M) vs. tx (>1B) and input/output (>2.6B). The array head can be thought of as a simple hashmap head with a fixed 1.0 load factor, and pass-thru hash function. Each bucket holds the singular element body position. This means that repeat entries for the same element get overwritten in the head and are essentially hidden in the body. This works well for state transitions where there is one state per header, and prevouts and txs association, where there is only one set per header/block.
The arraymap heads are larger (e.g. than a 2.2 LF hashhead), but they are sequential, so more efficient paging, and the arraymap requires no keys or links within the body - so the tables are overall much smaller and also with less paging. The mapping allows elements to be written out of order and yet indexed with array efficiency (always O(1)).