我有100个员工对象。员工对象有名称,年龄,工资。我应该在某个时候检索一名具有特定姓名的员工。
我只是想着
HashMap<String, List>
键入键,列表中的所有对象。
我知道地图不是一个集合:P
任何关于最佳集合而不是地图的想法。随时检索。
答案 0 :(得分:2)
您应首先创建包含所有相关字段(姓名,年龄,工资等)的Employee
课程
然后,您可以使用HashMap
:
Map<String, Employee> map = new HashMap<String, Employee>();
答案 1 :(得分:1)
如果您有一个List<Employee>
,并且您希望按名称或年龄等过滤列表,我猜lambdaj对此有用。
以下是一个示例,假设您要按名称过滤所有员工:
HasArgumentWithValue<Employee, String> matcher = Lambda.having(Lambda.on(Employee.class).getName(), Matchers.equalTo(name));
List<Employee> filteredEmployess = Lambda.filter(matcher, allEmployess);
通过静态导入,上面的代码将是:
List<Employee> filteredEmployess = filter(having(on(Employee.class).getName(), equalTo(name)), employees);
您可以找到更多示例here
对于年龄来说,找到年龄大于30岁的员工是有用的:
HasArgumentWithValue<Employee, Integer> matcher = Lambda.having(Lambda.on(Employee.class).getAge(), Matchers.greaterThan(30))
答案 2 :(得分:0)
虽然地图不会延伸集合类;但Map仍然是一种集合。因此,如果您的目的由 HashMap 提供;然后会建议去吧。
HashMap<String, Employee> map = new HashMap<String, Employee>();
答案 3 :(得分:0)
我不知道为什么HashMap不能满足您的需求,但如果您希望能够遍历所有员工(就好像它是一个集合),您仍然可以使用:
Map<String, List<Employee>> map = new HashMap<String, List<Employee>>();
// populate your map
for (List<Employee> list : map.values()) {
for (Employee employee : list) {
// do something
}
}
答案 4 :(得分:0)
我应该检索一些员工或员工,其中包含特定名称 点。
从上面的一行,我以为你有多个同名的员工。如果是这种情况,我建议使用guava的 Multimap 。例如HashMultimap
答案 5 :(得分:0)
如果要将员工类中的name属性用作密钥,请确保您没有具有相同名称的员工。映射使用键,在您的情况下为String,每个键必须是唯一的。如果他们对HashMap&lt; 字符串名称,员工&gt;你没问题。
(创建包含所有属性的员工类)
但是,如果它们不是唯一的,许多员工可以使用相同的名称,则应考虑向员工类添加属性。像
这样的东西private int ID;
并将其用作关键字:
HashMap<int, Employee>
HashMap的时间复杂度非常好。平均而言, get()调用将获得时间T(n)= O(1)(即,在恒定时间内)。 put 调用也是如此。