例如.:
{2,3},{1,2},(2,2},{3,1},{2,1} to {1,2},{2,1},{2,2},{2,3},{3,1}
Run Code Online (Sandbox Code Playgroud)
这就是我的想法:
对第一列值进行合并排序.迭代集合以查看第一列中是否存在任何重复值.如果有,请将它们列入列表.
合并在第二列上对此列表进行排序,然后将它们集成到主集中.虽然看起来确实可行,但似乎过于复杂.这应该运行O(NlogN)
,所以如果有人能想到更快/更复杂的算法也更简单,请发布它!
谢谢!
只需Comparator<T>
首先比较第一个字段,然后在第一个字段相等的情况下移动到第二个字段,只需实现一个比较任何两个对象的类型.然后,您可以将该组复制到一个列表中,调用Collections.sort
并将其列入列表和比较器.没有必要自己实现排序.
比较器将是这样的:
public class TwoFieldComparator implements Comparator<Foo>
{
public int compare(Foo first, Foo second)
{
// TODO: null checks
int firstComparison = Integer.compare(first.x, second.x);
return firstComparison != 0 ? firstComparison
: Integer.compare(first.y, second.y);
}
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以以Comparable<T>
相同的方式实现类的实现.
归档时间: |
|
查看次数: |
452 次 |
最近记录: |