java LinkedHashMap搜索
我有一节课
class polygon
{
private String name;
private int quantity;
// default constructor
private polygon()
{ }
public String get name() {
return name;
}
public void setname(String name) {
this.name = name;
}
public int getquantity() {
return quantity;
}
public void setquantity(int quantity) {
this.quantity = quantity;
}
}
我还有一张这样的地图:
LinkedHashMap<Integer, polygon> polymap = new LinkedHashMap<Integer, polygon>();
我要问两个问题:
- 如何找到具有特定值且名称为“square”的成员李>
- 我怎样才能得到数量最少的所有会员李>
谢谢
# 1 楼答案
containsValue()
使用equals方法查找匹配项。您可以重写polygon
类的equals()
方法。然后您可以使用containsValue(new polygon())
查找该值是否存在。equals
方法的实现将完全依赖于polygon类的name字段。大概是这样的:注意:您正在重写类的
equals()
方法,因此可能会对您在应用程序的其他位置如何使用它产生一些副作用我建议您保留一个单独的
PriorityQueue
来查找最低数量polygon
。在初始化队列时提供自定义Comparator
# 2 楼答案
我们从评论和更新中了解到:Polygon是一个具有成员字符串名称(可能但不一定唯一)和int数量(无限制)的类。还有一个时间戳,这个整数用作
要查找具有给定名称的所有多边形,请执行以下操作:
现在这是一个顺序搜索,如果条目数量很大,可能需要一些时间。假设名称是唯一的,O(1)访问时间可以通过创建另一个与polymap并行的贴图,将名称字符串映射到多边形对象来实现。(考虑删除的额外工作,但是Map.remove(,)(应该会有帮助。)
要查找具有最小数量的所有多边形,请确定最小数量,同时保留一组具有该最小数量的多边形:
同样,顺序搜索,但这里第二个映射需要一个多映射,即
Map<Integer,Collection<Polygon>>