java - 反转 ArrayList(理解代码)

标签 java arraylist

我在一本书中发现了一个练习,将一些钱添加到ArrayList中,然后反转它们。我知道我们可以轻松地使用 Collection.reverse(),这就是我的教科书所示的内容,但我在网上找到了另一个很酷的解决方案,我试图理解它,但遇到了麻烦。

代码如下:

class Purse {
    private ArrayList<String> coins = new ArrayList<String>();

    public void addCoin(String coinName) {
        coins.add(coinName);
    }

    public void reverse() {
        for(int start = 0, end = coins.size() - 1; start < coins.size() / 2; start++, end--) {
            swap(start,end,coins);
        }
    }

    private void swap(int starting, int ending, List aList) {
        Object temp = aList.set(starting, aList.get(ending));
        aList.set(ending,temp);
    }

    public String toString() {
        return "Purse: " + coins;
    }

}

public class PurseDemo {
    public static void main(String [] args) {
        Purse purseObj = new Purse();
        purseObj.addCoin("Quarter");
        purseObj.addCoin("Dime");
        purseObj.addCoin("Penny");
        purseObj.addCoin("Nickel");
        System.out.println(purseObj);
        purseObj.reverse();
        System.out.println(purseObj);
    }
}

这是我困惑的地方:

Object temp = aList.set(starting,aList.get(ending));
aList.set(ending,temp);

首先,我想我明白了这一点。然而,这是我第一次看到 Object 关键字。我真正不明白的是 temp 实际代表什么(我在网上得到了这段代码,在我的书中他们还没有引入这个关键字 Object )

这是我对示例迭代的想法

假设我们的 arrayList 有

[Quarter,Dime,Penny,Nickel]

根据Object temp = aList.set(starting,aList.get(ending));

我们选取 ArrayList Quarter 中的第一个位置,并将 nickel 的值放入其中。这样我们就得到了ArrayList

[Nickel,Dime,Penny,Nickel]

现在我有点困惑..当我 system.out.println(temp) 时,它告诉我值是 QuarterDime。但为什么?有人可以和我一起进行示例迭代吗?

阅读答案后

[Quarter,Dime,Penny,Nickel]

Nickel 替换 Quarter,因此 temp 为 Quarter。所以我们在末尾添加季度 即我们得到

Quarter,Dime,Penny,Quarter

等等..但是我们的镍币到哪里去了?!

最佳答案

set() 方法返回被新对象替换的对象。第一行

Object temp = aList.set(starting,aList.get(ending));

等同于:

Object temp = aList.get(starting);
aList.set(starting, aList.get(ending));

实际上,您可以在没有 temp 变量的情况下,在一行中完成此操作:

aList.set(ending, aList.set(starting, aList.get(ending)));

关于java - 反转 ArrayList(理解代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38755521/

相关文章:

java - Weblogic 在使用代理时破坏 CXF 证书身份验证

java - SimpleDateFormat 行为不一致

java - 如何访问源自数据库的 ArrayList 内的 HashMap ?

java.lang.ClassCastException - 同一对象 - 两个类,为什么?

java - 在内存中的 zip 中解析 XML

java - postgres serial/bigserial 列的正确 Hibernate id 生成器?

java - 在android中开始新 Activity 时尝试停止动画

java - List 的 removeIf() 未按预期工作

java - 如何将for循环迭代回它在java中访问的最后一个索引

java - 将字符串数组转换为数组列表?