sanshui_yangfei 2020-04-05 11:05 采纳率: 28.6%
浏览 200
已采纳

java集合Comparator接口实现排序问题

设计一个整数排序算法,规则很简单:
1、同为正数或者同为负数,小的排前,大的排后。
2、所有负数大于所有正数。所有正数排前,负数排后。
3、零最小。排最前。

直接上代码:

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

import org.junit.Test;

public class TestComparator {
    @Test
    public void testInt() {
        List<Integer> list=new ArrayList<Integer>();
        list.add(3222222);
        list.add(-1000);
        list.add(1000);
        list.add(1323235);
        list.add(-1065650);
        list.add(145466);
        list.sort(new Comparator<Integer>() {

            @Override
            public int compare(Integer o1, Integer o2) {
                if(o1*o2>0) {
                    return o1-o2;
                }else if(o1*o2<0){
                    return o2-o1;
                }else {
                    return o1==0?-1:1;
                }
            }

        });
        System.out.println(list);
    }
}

期望结果:1000 145466 1323235 3222222 -1000 -1065650
实际输出结果:[1000, 1323235, 145466, -1065650, -1000, 3222222]
我对compare函数返回值的理解是:

返回值为负数,两个比较对象不交换位置;
返回值为正数或0,两个比较对象交换位置;

是理解上存在问题,还是代码逻辑上存在问题?请各位指导。

  • 写回答

1条回答 默认 最新

  • 守得云开终见月明 2020-04-05 17:04
    关注

    只能指定一个比较规则吧,你这个要求貌似无法满足,可以查看源码,实际上是按数组的形式进行排序的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 9月18日