搜索地图或列表

时间:2013-03-19 09:43:10

标签: java database gwt search

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

该JS DB被处理为插入GWT地图并变为:

Map<Long, Product> mp;

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

3 个答案:

答案 0 :(得分:2)

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

例如

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

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

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

答案 1 :(得分:0)

  

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

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

答案 2 :(得分: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是属性,即width,int是值300,List包含此Attribute,Int的所有产品。根据实施情况,这些类型可能不同。