无法在ArrayList中执行交换

时间:2014-03-26 19:04:17

标签: java

我应该写一个方法来交换ArrayList元素,这是string.I提出了以下方法。这给了我一个错误,

  

线程“main”中的异常java.lang.UnsupportedOperationException at   java.util.AbstractList.add(AbstractList.java:148)at   Alternate_ArrayList.swapPairs(Alternate_ArrayList.java:139)at at   Alternate_ArrayList.main(Alternate_ArrayList.java:56)

我的方法是:

  public static List swapPairs(List<String> students)
    {
        String temp="";
        String temp2="";
        if(students.size()%2==0)
        {
            for(int i=0;i<students.size()-2;i++)
            {
                temp=students.get(i);
                temp2=students.get(i+1);
                students.add(i,temp2);
                students.add(i+1,temp);



            }
            return  students;
        }
        return  students;
    }

我的主要是:

public class Alternate_ArrayList {
public static void main(String args[])
{
List<String> students=new ArrayList<String>();
    students=Arrays.asList("B","R","M","F");
    System.out.println("Sawp pair: " + swapPairs(students));
}
}

'set(index,object)使错误消失。但是,现在我的前2个元素被交换了,而不是最后两个元素。

有些建议会很好。

由于

4 个答案:

答案 0 :(得分:0)

使用 ArrayList.set(index,Object)方法而不是add来替换索引处的值,如下所示:

students.set(i,temp2);

答案 1 :(得分:0)

我不确定你对&#34; swap&#34;的定义究竟是什么,但如果你只是想交换学生对,你可能想做这样的事情:

public static List<String> swapPairs(List<String> students)
{
    String temp;
    String temp2;
    if(students.size()%2==0)
    {
        for(int i=0;i<students.size();i+=2)
        {
            temp=students.get(i);
            temp2=students.get(i+1);
            students.set(i,temp2);
            students.set(i+1,temp);
        }
    }
    return  students;
}

答案 2 :(得分:0)

您在参数中收到的列表似乎是一个不可变列表,因此无法修改。
查看方法的调用者以检查列表并进行修复 或者,如果您愿意,还可以根据方法开头作为参数传递的列表创建新列表:

List<String> newList = new ArrayList<>(students)

更新:

在main方法中,Arrays.asList()返回一个固定大小的列表。你不能在它上面使用add()。如果您只想交换,请使用set()而不是add()。如果您需要更改列表的大小,请按照我在答案开头所说的那样创建一个新列表。

答案 3 :(得分:0)

由于添加,代码似乎进入无限循环。试试这段代码,看看它是否有效:

public static List swapPairs(List<String> students)
    {
        String temp="";
        String temp2="";
        if(students.size()%2==0)
        {

            //Removed size()-1 to handle lists with two elements and added I=1+2 to swap alternate elements.
            for(int i=0;i<students.size() ;i=i+2)
            {
                temp=students.get(i);
                temp2=students.get(i+1);
                students.set(i,temp2);
                students.set(i+1,temp);



            }
            return  students;
        }
        return  students;
    }