java如何交换列表中的项目?
我一直在想如何在arraylist中交换项目;首先,我使用以下代码创建了一个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 楼答案
看看ArrayList API,特别是set()方法。 http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#set(int,%20E)
“用指定的元素替换此列表中指定位置的元素。”
给该方法一个快照,而不是add(),可能如下所示:
基本上,当你陷入困境时,浏览API看看是否有其他方法可以让任务变得更容易一点是没有坏处的。我们没有人完全熟记API,回到那个文档对每个人来说都是很平常的事情。嗯,几乎所有人
# 2 楼答案
收藏。交换(List,int,int)JDK1.4+方法就是这样做的。下面是一个例子:
# 3 楼答案
您需要使用set而不是add
如果使用set,它将用新元素替换该位置的元素
所以你的交换函数应该是这样的:
# 4 楼答案
代码的作用是:
因此,如果您有一个内容为
["A", "B", "C", "D", "E"]
的列表,并且您调用了swap(1, 3, list)
,遵循伪代码,您将得到:s
变成“B”["A", **"D"**, "B", "C", "D", "E"]
["A", "D", "B", **"B"**, "C", "D", "E"]
您要做的是通过设置它们来交换
x
和y
处的值,而不是添加它们:这实际上会将索引
x
和y
处的值相互替换