有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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,那么这只会导致许多新问题。正如你可能知道的,我是这方面的初学者,任何帮助都将不胜感激


共 (4) 个答案

  1. # 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)
    

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

    给该方法一个快照,而不是add(),可能如下所示:

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

    基本上,当你陷入困境时,浏览API看看是否有其他方法可以让任务变得更容易一点是没有坏处的。我们没有人完全熟记API,回到那个文档对每个人来说都是很平常的事情。嗯,几乎所有人

  2. # 2 楼答案

    收藏。交换(List,int,int)JDK1.4+方法就是这样做的。下面是一个例子:

    Collections.swap(myList, 0, 1)
    
  3. # 3 楼答案

    您需要使用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);
    } }
    
  4. # 4 楼答案

    代码的作用是:

    1. 在x处得到字符串
    2. 在y和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);
    }
    

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