【问题标题】:Searching to a Map or List搜索地图或列表
【发布时间】:2013-03-19 09:43:10
【问题描述】:

我在 CMS 中部署我的 GWT 应用程序,其中“数据”来自 CMS“结构”,然后处理成 Javascript DB(我使用 TaffyDB)。

那个JS DB,被处理插入到一个GWT映射中,变成:

Map<Long, Product> mp;

产品数量不会那么多,我认为浏览器可以处理它。我可以在此地图中搜索特定 Product 属性的可能性有多大?然后返回一个Map 或List 的Products

【问题讨论】:

    标签: java database gwt search


    【解决方案1】:

    第一个简单的方法应该是迭代 Map 并获得匹配的 Products。如果这太慢,您可以创建专门的地图,以便更容易(更快)找到您正在寻找的东西。这些地图的外观取决于您的“查询”。

    例如

    Map<String, Collection<Product>> colorMap; // maps colors to Products
    

    或

    Map<Integer, Collection<Product>> ratingMap; // maps user rating to Products
    

    您应该最初创建它们。所以你只需要迭代整个地图一次。

    【讨论】:

      【解决方案2】:

      我可以在此地图中搜索特定产品属性的可能性有多大?

      好消息是这是可能的。坏消息是它将涉及线性时间搜索。换句话说,您必须检查地图的每个元素。

      【讨论】:

        【解决方案3】:

        前面说过,第一种方法很简单

        List<Product> matchingPrds = new ArrayList<Product>();
        
        foreach(Product pr : mp.Values())
        {
            if(pr.getAttribute() == yourValue)
            {
                matchingPrds.add(pr);
            }
        }
        
        return pr;
        

        虽然迭代地图是个坏主意。如果您希望多次执行此操作,您可以迭代一次保存到新集合。这不会占用大量内存,因为集合仅保存指针,并且对象实例基本相同。

        因此,根据使用情况,您可以使用 user714965 解决方案

        例子

        Map<String,Map<Int,List<Product>> attrValueProductsMap = new HashMap<String,Map<Int,List<Product>>();
        

        其中 String 是属性,即宽度,int 是值为 300,List 包含此 Attribute,Int 的所有产品。类型可能因实现而异。

        【讨论】:

          猜你喜欢
          • 2016-09-04
          • 1970-01-01
          • 1970-01-01
          • 2019-02-11
          • 1970-01-01
          • 2012-01-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多