2017-10-12 21 views
0

最近在访问中提出了这个问题,访问者更关心为此服务的任何第三方库。自定义哈希映射为多个搜索提供不同的密钥

如果如果我想用ID来搜索雇员我已经与

String firstName; 
int id; 
String lastName; 

一个Employee类,我需要在我的HashMap中使用id作为重点和员工的价值

HashMap<Integer,Employee> 

如果我想现在使用我的密钥作为名字,那么我需要另一个hashMap作为HashMap<String,Employee>

是否有任何标准库,我不需要制作多个Google Maps for searchin g目的使用不同的键。 如果我想使用id + firstName作为搜索条件并将值作为Employee对象,该怎么办? 如果有10个属性,我需要设计一个数据结构来实现这个目的呢?

回答

0

您可以使用SQLite(标记的Android)数据库,以便您可以使用任何属性搜索记录。

+0

谢谢,但我想只使用数据结构来做到这一点。我很好奇是否有任何库(Google/Guavus)为我们提供了自定义的HashMap,或者我们可以创建自己的HashMap。 – paras4all

0

您可以简单地使用一个HashMap<String,Employee>

作为键使用包含属性名称作为前缀的字符串,例如, idfirstName,姓氏followed by a separator like:`和之后的价值。

这也可以使用属性的组合作为关键。

如果您现在将一个员工实例添加到HashMap中,则添加三个条目,并使用相同的值。

实施例:

employee1 = Employee { 
    id: 1, 
    firstName: "John", 
    lastName: "Doe" 
} 

HashMap: { 
    "id:1" -> employee1 
    "firstName:John" -> employee1 
    "lastName:Doe" -> employee1 
} 
+0

当谈到检索时,我传递了map.get(1)或map.get(“John”)或map.get(“Doe”)。即使我们用John连接fN,用Doe连接lN来获得Employee对象,如何区分firstName和lastName。如果全名是John Doe和John Loe呢? map.get(“firstName:John”)会给出不正确的结果。如果全名是John Doe和Doe John,会怎么样?再次错误的结果。不是吗? – paras4all

+0

不,你传递'map.get(“firstName:John”)''或'map.get(“lastName:Doe”)''。 – Robert

+0

如果你有多个条目映射到同一个键,你需要一个MultiMap,像[Guava](https://github.com/google/guava/wiki/NewCollectionTypesExplained#multimap)。 – Robert

相关问题