用Java查找前10个匹配项的算法

时间:2015-05-24 15:42:57

标签: java algorithm match

我正在编写逻辑,以针对用户对象列表查找请求的前10个匹配项(包含8个属性)(用户对象具有请求中的每个属性的值)。我必须从这个用户对象列表中找到前10个匹配项。

我目前正在做的是:

  1. 遍历清单。
  2. 将Request Attribute与User对象存储的属性进行匹配。并且IF 5属性匹配我将其视为匹配并将MATCH_COUNT更新为1。
  3. 像这样我继续遍历找到前10个匹配(5个属性匹配)。 每当我有MATCH_COUNT到10时,我就会打破循环,即使列表没有完全遍历

    这种方法的问题是列表中的未反向用户对象可能有超过5个属性的匹配,但我没有遍历,因为我已经停止了。

    那你有什么建议?这绝对涉及在到达MATCHES之前遍历整个列表,但我想不出有效的解决方案。

2 个答案:

答案 0 :(得分:0)

  • 遍历用户对象的完整列表
  • 在插入列表的单独类中保留每个用户对象的匹配计数。
  • 按匹配计数降序排列列表
  • 如果列表超过10则返回前10个,否则返回完整列表。

答案 1 :(得分:0)

您应该使用quickselect和比较器来比较两个元素的匹配数。该算法以平均时间O(n)运行,这比排序所需的时间O(n log n)更好。