设置排序算法

时间:2016-07-19 21:18:13

标签: java algorithm

假设我有3个学生阵列,[A,B,C]彼此之间是非独特的(即A阵列可能有一个学生也在阵列B中找到)。我正在寻找一种有效的方法来过滤这些数组,使得每个数组都是唯一的,从A开始,然后是B,然后是C(即数组A和B中的学生最终将出现在A列表中,并从B列表中删除因为A在B)之前。如何在分别保留阵列A,B,C阵列的同时执行此操作。 (即我不能将所有学生都放入一套,因为他们失去了与他们最初属于哪个名单的关联)。

student对象具有可用于排序/过滤的id属性。 玩具问题仅适用于3个列表(它可以扩展到更大的列表,这就是我寻找最佳解决方案的原因)

 SELECT tbl_uploads.file_name, tbl_users.user_id, tbl_users.user_name, tbl_collab.collab_userid, tbl_collab.collab_username
  FROM tbl_uploads

left join tbl_collab  on tbl_collab.file_name = tbl_uploads.file_name

 left join tbl_users on  tbl_uploads.user_id = tbl_users.user_id
group by tbl_uploads.file_name

2 个答案:

答案 0 :(得分:1)

您所要做的就是创建一个包含所有唯一值的HashSet。

  • 然后从数组/列表A开始,将每个元素添加到集合中。
    • 如果添加了该值,则移至下一个值。
    • 如果被拒绝 (返回false)从数组中删除元素然后移动 到下一个号码。
  • 如果到达阵列/列表的末尾,请转到下一个列表。

最后,您应该拥有所有唯一列表,而不会重复数字。

答案 1 :(得分:0)

鉴于a, b, c是学生列表,并且学生班级正确实施equals()(和hashCode()),您可以从后续列表中删除之前列表中显示的学生:

b.removeAll(a);
c.removeAll(a);
c.removeAll(b);

当然,保留在列表中的学生的顺序。