首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java - Arrays.sort()和Collections.sort()中的Collections.sort需求

java - Arrays.sort()和Collections.sort()中的Collections.sort需求
EN

Stack Overflow用户
提问于 2015-07-16 11:06:42
回答 1查看 1.5K关注 0票数 0

我已经编写了一个方法,它对arrayList进行排序,并交换该arrayList中的连续元素。我面临一个问题-

如果我使用Collections.sort()实现该方法,则会产生堆大小错误,而如果使用Arrays.sort(),则不会给出结果并成功运行。

代码语言:javascript
复制
public ArrayList<Integer> sortAndSwap(ArrayList<Integer> a) {
       Collections.sort(a);
        for(int i = 0; i < a.size()-1; i+=2) {
            int temp = a.get(i);
            a.add(i, a.get(i+1));
            a.add(i+1, temp);
        }
        return a;
    }

此方法给出以下错误-

线程“主”java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:235)中的异常: java.util.Arrays.copyOf(Arrays.java:3210)、java.util.Arrays.copyOf(Arrays.java:3181)、java.util.ArrayList.grow(ArrayList.java:261)、java.util.ArrayList.grow(ArrayList.java:261)、java.util.ArrayList.add(ArrayList.java:475)和Solution.wave(Solution.java )的Java堆空间:7)在Main.main(Main.java:322)

而如果我按以下方式修改它

代码语言:javascript
复制
public ArrayList<Integer> sortAndSwap(ArrayList<Integer> a) {
        Integer []arr = new Integer[a.size()];
        a.toArray(arr);
        Arrays.sort(arr);
        for(int i = 0; i < a.size()-1; i+=2) {
            int temp = arr[i];
            arr[i] = arr[i+1];
            arr[i+1] = temp;
        }
        a = new ArrayList<Integer>(Arrays.asList(arr));
        return a;
    }

它运行良好,并取得了预期的结果。为什么会这样,有人能解释一下吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-16 11:14:32

对于应该使用add的交换操作,您可以调用set。所以你在无止境地增加名单。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31452446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档