按学生俱乐部的相似性排序学生俱乐部的链接列表

时间:2017-06-17 17:04:39

标签: java sorting user-input

我目前正在编写一个Java程序,根据用户对特殊兴趣,专业等问题的回答,将用户与推荐的学生群体进行匹配。 每个用户都由User对象定义。每个学生组都由一个Group对象定义。

我有一种工作方法,可以为每个特定的群组实例分配一个特定的分数 - 例如,Group schoolNewspaper的分数为72,而影视团队的分数为99分。

每个Group对象也有一个整数值,称为

int difference;

这表示用户得分与俱乐部得分之间的绝对值的相似性。例如,如果某人参加测验并得到71,则将schoolNewspaper的差值分配为1,并为filmMakers Group分配差值26.

将用户的得分与所有组得分进行比较,从而为每个组分配差值。我想形成一个包含所有组的链表,然后对其进行排序,使得具有最小差值的那些组位于列表的头部。这是因为我将使用5个最相似的组来为用户创建推荐,我觉得对列表进行排序并采用前5个元素而不是重复搜索会更有效。

我不确定Java库中是否存在可能使此过程更容易的当前排序方法 - 有时我尝试重新发明轮子而没有意识到可以使用某些库操作。那么,是否有一种特殊方法可以使用在唯一对象中定义的整数值来排序此类对象的链接列表?我对编程比较陌生,所以在方法/理论方面的任何帮助都会受到高度赞赏。

编辑:或许另一种数据结构可能更适合这种排序而不是链表?

1 个答案:

答案 0 :(得分:2)

您可以使用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;
        }
    }
}

正如旁注:

通过说:“每个Group对象也有一个整数值,称为

int difference;

这表示用户得分与俱乐部得分之间的绝对值的相似性。例如,如果有人参加测验并获得71,则schoolNewspaper的差值将分配为1,并且filmMakers Group的差值为26.“

您是说该程序在用户使用该程序时为用户提供即时反馈,还是以集体为基础?

如果是后者,我假设用户对象,那么收集用户的不同分数将更有效。然后,您只需计算方法中的差异,使用不同的分数传递每个User-object,并对每个用户使用类似于上面提到的排序实现。

然后,可以将User对象传递到匹配的Group对象的前5个列表。这样,您不必更新每个Group对象的difference值,也不需要为每个组创建多个实例。 :)