Comparison method violates its general contract 关于jdk自带算法问题
昨晚上线,线上报了一个问题,用的jdk8,用的collections.sort方法,
public static void main(String[] args) { List<Integer> results = new ArrayList<>(); for(int i =0;i<100000;i++){ results.add((int)(Math.random()*1000)); } System.out.println(JsonUtil.toString(results)); System.setProperty("java.util.Arrays.useLegacyMergeSort", "true"); Collections.sort(results, new Comparator<Integer>(){ @Override public int compare(Integer o1, Integer o2) { if(Integer.compare(o1, o2)<=0){ return 1; } return -1; // int result = Integer.compare(o1, o2); // if(result<0){ // return 1; // } else if (result==0) { // return 0; // } else { // return -1; // } } }); System.out.println(JsonUtil.toString(results)); }
注明:Jsonutil只是打印内容用的
这里面根据网上查询的
http://blog.csdn.net/fanzitao/article/details/8040201
使用
System.setProperty("java.util.Arrays.useLegacyMergeSort", "true");这句话并不生效,最后还是报错,不过后面解决方案就是注释的那句话,必须返回0 即可,这种jdk的报错真心无奈-.-
慢慢写下去,总会有用到的一天
posted on 2016-10-14 09:50 Ministor_X 阅读(472) 评论(1) 编辑 收藏 举报