2015-06-21 50 views
0

我一直在试图弄清楚如何交换arraylist中的项目;所以我首先创建了一个使用此代码的数组列表:如何交换列表中的项目?

import java.util.ArrayList; 
import java.util.List; 

public class ListADT { 
public static void main (String[] args){ 
    List <String> myList = new ArrayList<String>(); { 
    myList.add("A"); 
    myList.add("B"); 
    myList.add("C"); 
    myList.add("D"); 
    myList.add("E"); 
System.out.println(myList);}}} 

这将在控制台上返回[A,B,C,D,E]。
然后我打开了另一个班级,并使用我在网上找到的这段代码,并尝试进行修改以使其起作用,但尚未运行。

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); 
} } 

如果我尝试用列表中元素的位置编号替换x和y,那么这只会导致一系列新问题。正如你可以告诉,我是一个初学者,并且任何帮助将不胜感激。

+1

您近了; 'add'不是你正在寻找的方法,因为它插入而不是替换。检查List Javadocs以找到替换的方法,并从那里跳到您的答案。 – tavnab

回答

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); 
} } 
+1

他正在使用他的重载版本,也需要一个索引,所以它不会添加到列表的末尾。不幸的是,他并没有移除,所以名单会变得更长。就像你指出的那样,set()应该处理这个问题。 –

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) 

“在此列表中与指定的元素中的指定位置的元素替换”。

给这个方法了一枪,而不是加(),大概如下:

  • 您可以获取和字符串从位置x存储(像你这样做),
  • 然后设定值在位置y到位置x,
  • 最后,从先前存储的字符串中设置位置y的值。

基本上,无论什么时候卡住了,它不会伤害到浏览API以查看是否有任何其他方法可能使任务变得更容易一些。我们没有一个人完全了解API,并且回到该文档对每个人来说都是一件普通的事情。好吧,几乎每个人。

1

你的代码所做的是:

  1. 为y得到串x处
  2. 插入串,在位置x
  3. 刀片上的X前一个字符串,在位置Y

所以如果你有一个内容为["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"]

你想要做什么是交换由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); 
} 

This will actual请将xy处的值互相替换