LinkedHashMap搜索

时间:2015-10-10 13:51:55

标签: 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>();

我要问两个问题:

  1. 如何找到具有特定值的成员,其名称如“square”?
  2. 如何获得数量最少的所有会员?
  3. 感谢。

2 个答案:

答案 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>();
  
      
  1. 如何找到具有特定值的成员,其名称如&#34; square&#34;?
  2.   

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()方法,因此可能会对您在应用程序的其他位置使用它的方式产生一些影响。

  
      
  1. 如何获得数量最少的所有会员?
  2.   

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