我在一本书中找到了一个练习,它将一些钱添加到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添加到最后
我们得到了
Quarter,Dime,Penny,Quarter
等等..但我们的镍去了哪里?!
答案 0 :(得分:3)
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)));
答案 1 :(得分:0)
交换方法可以转换为“通常的形式”:
Object temp = aList.get(starting);
aList.set(starting, aList.get(ending));
aList.set(ending, temp);
你找到的所有代码都是前两行,因为List.set
承诺返回被替换的值。
现在让我们看一下您的示例,其中aList
最初为[Quarter,Dime,Penny,Nickel]
,starting
为0
且ending
为3
。
Object temp = aList.get(starting);
,现在temp
是Quarter
。aList.set(starting, aList.get(ending));
,现在aList
是[Nickel,Dime,Penny,Nickel]
。aList.set(ending, temp);
将aList的最后一个元素设置为Quarter
:[Nickel,Dime,Penny,Quarter]