如何交换列表中的项目?

时间:2015-06-21 22:59:12

标签: java arraylist swap

我一直想弄清楚如何交换arraylist中的项目;所以首先我用这段代码创建了一个arraylist:

import java.util.List;


public class swap {
    //precondition: x and y are >= 0 and < mylist.size()
    //precondition: mylist is not null
    void swap(int x, int y, List <String> myList) {
        String s = myList.get(x);
        myList.add(x, myList.get(y));
        myList.add(y, s);
System.out.println(myList);
} }

这将在控制台上返回[A,B,C,D,E] 然后我打开了另一个类并使用了我在网上找到的代码,并试图进行修改以使其工作,但它一直没有用。

{{1}}

如果我尝试将x和y替换为列表中元素的位置编号,那么这只会导致一系列新问题。你可以说,我是初学者,任何帮助都会受到赞赏。

4 个答案:

答案 0 :(得分:1)

看一下ArrayList API,特别是set()方法。 http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#set(int,%20E)

public E set(int index, E element)

&#34;用指定的元素替换此列表中指定位置的元素。&#34;

给该方法一个镜头而不是add(),可能如下:

  • 您可以从位置x获取并存储字符串(就像您正在做的那样),
  • 然后将位置y的值设置为位置x,
  • 最后,在您之前存储的String中设置y位置的值。

基本上,每当您遇到困难时,浏览API以查看是否有任何其他方法可能会使任务变得更容易,这会让您感到痛苦。我们都不会完全了解API,回到那个文档对每个人来说都是常见的事情。好吧,几乎所有人。

答案 1 :(得分:1)

您的代码的作用是:

  1. 获取字符串x
  2. 在y处插入字符串,位置x
  3. 将前一个字符串插入x,位置y
  4. 因此,如果您有一个内容为["A", "B", "C", "D", "E"]的列表,并且您调用了swap(1, 3, list),那么请按照伪代码进行操作:

    1. s变为“B”
    2. 列表变为["A", **"D"**, "B", "C", "D", "E"]
    3. 列表变为["A", "D", "B", **"B"**, "C", "D", "E"]
    4. 您要做的是将xy的值换成设置,而不是添加它们:

      void swap(int x, int y, List <String> myList) {
          String s = myList.get(x);
      
          myList.set(x, myList.get(y));
          myList.set(y, s);
      
          System.out.println(myList);
      }
      

      这实际上会将索引xy上的值互相替换

答案 2 :(得分:0)

您需要使用set而不是add。

如果使用set,它将用新元素替换该位置的元素。

// arrayList.set(index i,String replaceElement);

所以你的交换函数应该是这样的:

public class swap {
    void swap(int x, int y, List <String> myList) {
        String s = myList.get(x);
        myList.set(x, myList.get(y));
        myList.set(y, s);
System.out.println(myList);
} }

答案 3 :(得分:0)

Collections.swap(List,int,int)JDK 1.4+方法就是这样做的。这是一个示例:

Collections.swap(myList, 0, 1)