我有一个班级
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>();
我要问两个问题:
感谢。
答案 0 :(得分:1)
我们从评论和更新中学到了什么:Polygon是一个具有成员字符串名称(可能但不一定是唯一的)和int数量(没有限制)的类。还有一个时间戳,此Integer用作
中的键Map<Integer,Polygon> polymap
查找具有给定名称的所有多边形:
for( Polygon polygon: polymap.values() ){
if( polygon.getName().equals( givenName ) ){ //... }
}
现在这是一个顺序搜索,如果条目数量非常大,可能需要一些时间。假设名称是唯一的,可以通过与polymap并行创建另一个Map,将名称字符串映射到Polygon对象来实现O(1)访问时间。 (考虑删除的额外工作,但Map.remove(。,。)应该有所帮助。)
要查找具有最小数量的所有多边形,请确定最小值,同时保持一组多边形的最小值:
int min = Integer.MAX_VALUE;
Set<Polygon> polyset = new HashSet<>();
for( Polygon polygon: polymap.values() ){
int qtty = polygon.getQuantity();
if( qtty < min ){
min = qtty;
polyset.clear();
polyset.add( polygon );
} else if( qtty == min ){
polyset.add( polygon );
}
}
同样,顺序搜索,但这里第二张地图需要一张多图,即Map<Integer,Collection<Polygon>>
。
答案 1 :(得分:0)
LinkedHashMap<Integer, polygon> polymap = new LinkedHashMap<Integer, polygon>();
- 如何找到具有特定值的成员,其名称如&#34; square&#34;?
醇>
containsValue()
使用equals方法查找匹配项。您可以覆盖equals()
类的polygon
方法。然后,您可以使用containsValue(new polygon())
来查找值是否存在。 equals
方法实现将完全依赖于多边形类的名称字段。像这样:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof polygon)) return false;
polygon polygon = (polygon) o;
if (!name.equals(polygon.name)) return false;
return true;
}
注意:您正在覆盖该类的equals()
方法,因此可能会对您在应用程序的其他位置使用它的方式产生一些影响。
- 如何获得数量最少的所有会员?
醇>
我建议你保留一个单独的PriorityQueue
来查找最低数量polygon
。在初始化队列时提供自定义Comparator
。