java map存储对象_JAVA:查找存储在hashMap中的对象的最佳性能方法
如果你想要速度并且總是在尋找一個(gè)特定屬性,那么最好的辦法是創(chuàng)建另一個(gè)用該屬性鍵入的“緩存”哈希映射.
對(duì)于不到一百萬(wàn)個(gè)條目,占用的內(nèi)存將是無(wú)關(guān)緊要的,并且哈希映射查找將比任何其他解決方案快得多.
或者,您可以將所有搜索屬性放入單個(gè)映射(即名稱和ID).如果您關(guān)心碰撞,請(qǐng)使用獨(dú)特的內(nèi)容為密鑰添加前綴.就像是:
String ID_PREFIX = "^!^ID^!^";
String USERNAME_PREFIX = "^!^USERNAME^!^";
String FIRSTNAME_PREFIX = "^!^FIRSTNAME^!^";
Map personMap = new HashMap();
//add a person
void addPersonToMap(Person person)
{
personMap.put(ID_PREFIX+person.id, person);
personMap.put(USERNAME_PREFIX+person.username, person);
personMap.put(FIRSTNAME_PREFIX+person.firstname, person);
}
//search person
Person findPersonByID(long id)
{
return personMap.get(ID_PREFIX+id);
}
Person findPersonByUsername(String username)
{
return personMap.get(USERNAME_PREFIX+username);
}
//or a more generic version:
//Person foundPerson = findPersonByAttribute(FIRSTNAME_PREFIX, "mike");
Person findPersonByAttribute(String attr, String attr_value)
{
return personMap.get(attr+attr_value);
}
以上假設(shè)每個(gè)屬性在所有人中都是唯一的.這可能適用于ID和用戶名,但問(wèn)題是指定firstname = mike,這不太可能是唯一的.
在這種情況下,你想用列表進(jìn)行抽象,所以它更像是這樣:
Map> personMap = new HashMap>();
//add a person
void addPersonToMap(Person person)
{
insertPersonIntoMap(ID_PREFIX+person.id, person);
insertPersonIntoMap(USERNAME_PREFIX+person.username, person);
insertPersonIntoMap(FIRSTNAME_PREFIX+person.firstname, person);
}
//note that List contains no duplicates, so can be called multiple times for the same person.
void insertPersonIntoMap(String key, Person person)
{
List personsList = personMap.get(key);
if(personsList==null)
personsList = new ArrayList();
personsList.add(person);
personMap.put(key,personsList);
}
//we know id is unique, so we can just get the only person in the list
Person findPersonByID(long id)
{
List personList = personMap.get(ID_PREFIX+id);
if(personList!=null)
return personList.get(0);
return null;
}
//get list of persons with firstname
List findPersonsByFirstName(String firstname)
{
return personMap.get(FIRSTNAME_PREFIX+firstname);
}
在那一點(diǎn)上,你真的進(jìn)入了一個(gè)抓包設(shè)計(jì),但如果你不期待數(shù)百萬(wàn)條款,它仍然非常有效.
總結(jié)
以上是生活随笔為你收集整理的java map存储对象_JAVA:查找存储在hashMap中的对象的最佳性能方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: fileset java_Java Fi
- 下一篇: java父窗口传值给子窗口_【赖国荣】j