繁体   English   中英

LinkedHashMap 搜索

[英]LinkedHashMap searching

我有一堂课

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>();

我必须问两个问题:

  1. 如何查找是否存在名称为“square”的具有特定值的成员?
  2. 我怎样才能获得所有最低数量的会员?

谢谢。

我们从评论和更新中学到的东西: Polygon 是一个类,其成员为 String name(可能但不一定唯一)和 int 数量(没有限制)。 还有一个时间戳,这个Integer在

Map<Integer,Polygon> polymap

要查找具有给定名称的所有多边形:

for( Polygon polygon: polymap.values() ){
    if( polygon.getName().equals( givenName ) ){ //... }
}

现在这是一个顺序搜索,如果条目数量很大,可能需要一些时间。 假设名称是唯一的,O(1) 访问时间可以通过创建另一个与 polymap 并行的 Map,将名称字符串映射到 Polygon 对象来实现。 (考虑删除的额外工作,但 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>> ,即Map<Integer,Collection<Polygon>>

LinkedHashMap<Integer, polygon> polymap = new LinkedHashMap<Integer, polygon>();
  1. 如何查找是否存在名称为“square”的具有特定值的成员?

containsValue()使用 equals 方法查找匹配项。 您可以覆盖polygon类的equals()方法。 然后您可以使用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()方法,因此可能会对您在应用程序的其他地方使用它的方式产生一些副作用。

  1. 我怎样才能获得所有最低数量的会员?

我建议你维护一个单独的PriorityQueue来查找最低数量的polygon 初始化队列时提供自定义Comparator器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM