java – 给定一组具有2个值的对象.相对于第一个值,然后使用第二个值对集合进行排序

例如.:

{2,3},{1,2},(2,2},{3,1},{2,1} to {1,2},{2,1},{2,2},{2,3},{3,1}

这就是我的想法:

对第一列值进行合并排序.迭代集合以查看第一列中是否存在任何重复值.如果有,请将它们列入列表.

合并在第二列上对此列表进行排序,然后将它们集成到主集中.虽然看起来确实可行,但似乎过于复杂.这应该在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);
    }
}

或者,您可以让您的类实现Comparable< T>以同样的方式.

相关文章
相关标签/搜索