Java 反转ArrayList(理解代码)
我在一本书中找到了一个练习,在ArrayList中添加一些钱,然后将它们反转。我知道我们可以很容易地使用Java 反转ArrayList(理解代码),java,arraylist,Java,Arraylist,我在一本书中找到了一个练习,在ArrayList中添加一些钱,然后将它们反转。我知道我们可以很容易地使用Collection.reverse(),这是我的教科书所展示的,但我在网上找到了另一个很酷的解决方案,我正在尝试理解,但遇到了一些问题 代码如下: class Purse { private ArrayList<String> coins = new ArrayList<String>(); public void addCoin(String co
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);
}
}
首先,我想我明白了。然而,这是我第一次看到对象
关键字。我没有真正得到的是temp
实际代表的内容(我在网上得到了这段代码,在我的书中,他们还没有介绍这个关键字对象
)
下面是我对一个迭代示例的想法
假设我们的arrayList
[Quarter,Dime,Penny,Nickel]
根据objecttemp=aList.set(开始,aList.get(结束))代码>
我们在ArrayListQuarter
中取第一个点,然后将nickel
的值放入其中。所以我们得到了ArrayList
[Nickel,Dime,Penny,Nickel]
现在我有点糊涂了。。当我system.out.println(temp)
时,它告诉我值是Quarter
和Dime
。但是为什么呢?有人能和我一起经历一个示例迭代吗
阅读答案后
[Quarter,Dime,Penny,Nickel]
镍
取代了季度
,因此温度为季度
。所以我们在末尾加上四分之一
也就是说,我们得到了
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)));
交换方法可以转换为“常用形式”: 您找到的所有代码都是合并前两行,因为
List.set
承诺返回替换的值
现在让我们看看您的示例,其中aList
最初是[四分之一,一角,一便士,五分]
,开始是0
,结束是3
objecttemp=aList.get(开始)代码>,现在temp
是季度
aList.set(开始,aList.get(结束))代码>,现在是aList
是[镍币,一角硬币,一便士,镍币]
最后,aList.set(ending,temp)
,将列表的最后一个元素设置为季度
:[镍币、一角硬币、便士、季度]
我想我明白你的意思了,但现在我有点困惑镍会发生什么,你能看到我对我的问题所做的补充吗?@cresjoy nickel最后只被改为四分之一。不是一开始,怎么会?如果当我们到达aList.set(ending,temp)行时temp是季度,我们将结束指数currenrlty Nickel设置为temp,即季度。那么在下一次迭代中,我们只有[Dime,Penny]正确吗?这是正确的,在下一次迭代中,开始是1,结束是2。
aList.set(ending, aList.set(starting, aList.get(ending)));
Object temp = aList.get(starting);
aList.set(starting, aList.get(ending));
aList.set(ending, temp);