The map most probably uses a bit more memory: every entry is stored in an instance of Map.Entry (which basically is the same as your data class), and all the entries are stored in linked lists themselves stored inside an array of buckets. I concur with Jacob: if you need to lookup by keys, use a map. If you need an ordered list of records, use a list. Don’t choose based on what consumes more memory.