我存储的数量相对较少(将来可能会更大),然后搜索它,但这在我的项目中被证明是一个瓶颈。
要扩展我有几千行和几列。我希望能够搜索能够指定一个匹配任何元素的所有通配符的简单匹配。所有插入都可以在构造时进行,理想情况下不会存在重复,并且查询量大大超过了表格构造。我还需要能够比较表以查看是否包含相同的元素(不需要它们之间的差异)。存储的对象可以进行哈希处理,但不进行排序。这都存储在内存中。
所以最初我开始使用一个简单的hashset:
Set<ArrayWrapper> data = new HashSet<ArrayWrapper>();
其中ArrayWrapper
是Object[]
的简单包装器。对于使用通配符进行搜索,这显然很慢,例如{new Integer(3), null, "Test", null}
其中null
表示匹配任何内容。我添加了一个最小通配值的索引,这有助于但我觉得可能有更好的解决方案?
答案 0 :(得分:2)
看看tries。当你没有任何通配符时,查找速度不如散列集那么快,但是它允许使用通配符并且仍然非常快。
答案 1 :(得分:1)
@Justin - 建立你的回答,我相信这可以使用地图地图来实现。 @Molehill - 是否定义了使用的键数?或者它是可变的吗?
如果已定义(例如3:整数,字符串,字符串),您可以这样做
Map<Integer, Map<String, Map<String, Object>>>
。当您在搜索中使用外卡时,您必须轮询整个地图集或您所在地图的值集合。尽管如此,你可能会想象并写一个抽象。我最近为2键地图做了这个。