ArrayList内存不足

时间:2016-10-24 01:41:53

标签: java android

我必须写一个方法:

  1. 如果尺寸均匀---->>切换前两个值的顺序,然后切换下两个值的顺序等

    1. 如果尺寸为奇数---->>如上所述,但不要触及最后一个元素。

    2. 不必返回任何内容(无效)

  2. 很快,这就是我写的东西,而且每次都有例外(跑出记忆)

    public static void switchPairs(ArrayList<String> al){
        //temporary object definition
        String temp = null;
        //size is even
        if(al.size() %2==0){        
            //loop through the entire arraylist
            for(int i=0; i<al.size()-1; i++){
                //get the n+1 element and assign it to a temp variable
                 temp=al.get(i+1);  
                  //assign the n+1 element to the n position
                    al.add(i, temp);                            
            }
         } else {  //size is odd    
                //loop through the entire arraylist
        }
        System.out.println("After switching pairs.");
        System.out.println(al);
    }
    

    输出:

    请帮助我! 谢谢!

3 个答案:

答案 0 :(得分:1)

您应该使用 set method 更新现有的ArrayList元素。通过添加到ArrayList,您将增加其大小,因此您的循环永远不会终止,因为 i 的结束条件等于大小减1。这种情况永远不会得到满足,因此您的收藏会不断增长,直到您的内存不足为止。

for(int i=0; i<al.size()-1; i++){
  tmp = al.get(i+1);
  al.set(i+1,al.get(i));     
  al.set(i, tmp) //assign the n+1 element to the n position
}

答案 1 :(得分:0)

所以这里的问题是你要添加到arraylist,但你永远不会拿出任何东西。您必须删除第二个值,然后将其重新添加。

temp = al.remove(i+1);

temp = al.get(i+1);
al.remove(i+1);

由于你永远不会删除该值,因此每个新值的arraylist都会变大,就像指数函数一样。

答案 2 :(得分:0)

在您的代码中,您没有替换arraylist的相关索引中的值,而是通过{arraylist添加更多元素来增加al.add()的大小。 1}}方法(这里实际发生的是你添加的元素,插入到当前i位置,同时将当前位置的元素(如果有的话)和右边的任何后续元素添加到他们的指数)。 要重置或替换arraylist中的值,您需要使用set()方法。如果您需要循环到列表末尾,并在for loop中将其更改为for(int i=0; i<al.size(); i++){...}。请尝试以下代码

public static void switchPairs(ArrayList<String> al){

        String temp=null;


        if(al.size() %2==0){        //size is even

            //loop through the entire arraylist
            for(int i=0; i<al.size(); i++){

                temp=al.get(i+1);   //get the n+1 element and assign it to a temp variable
                al.set(i, temp);                    //assign the n+1 element to the n position

            }




        }else{      //size is odd

            //loop through the entire arraylist

        }

        System.out.println("After switching pairs.");
        System.out.println(al);

    }