我在一本书中发现了一个练习,将一些钱添加到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)
时,它告诉我值是 Quarter
和 Dime
。但为什么?有人可以和我一起进行示例迭代吗?
阅读答案后
[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/