0

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

该 JS DB 被处理以插入 GWT 映射并变为:

Map<Long, Product> mp;

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

4

3 回答 3

2

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

例如

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

或者

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

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

于 2013-03-19T09:47:13.533 回答
0

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

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

于 2013-03-19T09:46:03.383 回答
0

第一种方法很简单,正如前面所说

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。类型可能因实现而异。

于 2013-03-19T12:32:21.283 回答