有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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. 我怎样才能得到数量最少的所有会员

谢谢


共 (2) 个答案

  1. # 1 楼答案

    LinkedHashMap<Integer, polygon> polymap = new LinkedHashMap<Integer, polygon>();
    
    1. How can I find if there is a member with specific value which has the name like "square"?

    containsValue()使用equals方法查找匹配项。您可以重写polygon类的equals()方法。然后您可以使用containsValue(new polygon())查找该值是否存在。equals方法的实现将完全依赖于polygon类的name字段。大概是这样的:

    @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. How can I get all the member with the lowest quantity?

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

  2. # 2 楼答案

    我们从评论和更新中了解到:Polygon是一个具有成员字符串名称(可能但不一定唯一)和int数量(无限制)的类。还有一个时间戳,这个整数用作

    Map<Integer,Polygon> polymap
    

    要查找具有给定名称的所有多边形,请执行以下操作:

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

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