Lets say I have a list of 1,000,000 users where their unique identifier is their username string. So to compare two User objects I just override the compareTo() method an compare the username members.
Given a username string I wish to find the User object from a list. What, in an average case, would be the fastest way to do this.
I’m guessing a HashMap, mapping usernames to User objects, but I wondered if there was something else that I didn’t know about which would be better.
If you don’t need to store them in a database (which is the usual scenario), a
HashMap<String, User>would work fine – it has O(1) complexity for lookup.As noted, the usual scenario is to have them in the database. But in order to get faster results, caching is utilized. You can use EhCache – it is similar to
ConcurrentHashMap, but it has time-to-live for elements and the option to be distributed across multiple machines.You should not dump your whole database in memory, because it will be hard to synchronize. You will face issues with invalidating the entries in the map and keeping them up-to-date. Caching frameworks make all this easier. Also note that the database has its own optimizations, and it is not unlikely that your users will be kept in memory there for faster access.