我目前正在编写一个Java程序,该程序根据用户对特殊兴趣,专业等问题的回答,将用户与推荐的学生组相匹配。 每个用户都由一个用户对象定义。 每个学生组都由一个组对象定义。
我有一个工作方法,为每个特定的组实例分配一个特定的分数 - 例如,Group schoolNewspaper的分数为72,而Group filmMakers的分数为99。
每个 Group 对象还有一个整数值,称为
int difference;
这表示用户分数与俱乐部分数之间的绝对值相似性。 例如,如果有人参加测验并获得 71,则学校报纸的差异值分配给 1,电影制作者组的差异值分配为 26。
将用户的分数与所有组分数进行比较,从而为每个组分配一个差异值。 我想形成一个包含所有组的链表,然后对其进行排序,使具有最小差异值的组位于列表的顶部。这是因为我将使用 5 个最相似的组来为用户创建推荐,我觉得对列表进行排序并获取前 5 个元素比重复搜索更有效。
我不确定 Java 库中是否存在当前的排序方法,可能会使此过程更容易 - 因为有时我试图重新发明轮子而没有意识到如何使用某些库操作。 那么,是否有一种特殊的方式来使用唯一对象中定义的整数值来排序此类对象的链接列表? 我对编程相对较新,因此在方法/理论方面的任何帮助将不胜感激。
编辑:也许另一种数据结构可能更适合这种排序而不是链表?
您可以使用 Comparable 界面对Collections.sort(List<Group> groups)
组列表进行排序:
组实现示例:
public class Group implements Comparable{
private int difference;
... //code
public int compareTo(Group g) {
int diff = g.getDiff();
if(diff > this.difference) { // compared Group obj has greater diff
return -1;
}else if(diff == this.difference) { // compared Group obj has equal diff
return 0;
}else { // compared Group obj has lesser difference
return 1;
}
}
}
作为旁注:
通过说:"每个组对象也有一个整数值,称为
int difference;
这表示用户分数与俱乐部分数之间的绝对值相似性。例如,如果有人参加测验并获得 71,则学校报纸的差异值分配给 1,而电影制作者组的差异值被分配为 26。
您是说该程序在用户使用该程序时会立即提供反馈,还是基于集体?
如果是后者,我由用户对象假设,那么收集用户的不同分数会更有效。然后,您只需计算方法中的差值,传入每个 User-对象及其不同的分数,并在每个用户上使用类似于上述的排序实现。
然后,可以向 User 对象传递匹配的组对象的前 5 个列表。这样,您就不必更新每个组对象的difference
值,也不需要为每个组创建多个实例。:)