有人可以向我解释什么是差异?
private List<Coin> mycCoins = new ArrayList<>();
public Purse(Coin...coins) {
myCoins = Arrays.asList(coins);
myCoins.addAll(Arrays.asList(coins));
}
这些myCoins之间?
为什么我不能这样做
mycCoins.addAll(coins);
实际上知道我是否以这种方式写作会很有趣
for (Coin coin : coins) {
mycCoins.add(coin);
这种方式与我上面提到的不同
请帮助我,并向我解释
答案 0 :(得分:1)
Arrays.asList(coins)
为您提供了一个全新的列表,但它不是ArrayList
的常用类型。它是一种特殊类型的列表,下面有固定大小的数组,这意味着您无法在其中添加或删除元素。虽然您可以修改其中的值,但它仍然保持原始大小coins
。
addAll(something)
将硬币添加到您已经拥有的列表中,该列表可以是任何类型的List
。您可以在已经创建的ArrayList
上调用它,元素数量实际上会增加。
您传递给addAll
的内容不能是一个数组,但它必须是某种Collection
,因为addAll
的方式是Array.asList
定义。在大多数情况下,最简单的方法是将其从myList.addAll(Arrays.asList(coins));
传递给一个不可靠的列表,如
renderSortByOptions() {
return Object.keys(sortByOptions).map(sortByOption => {
return sortByOptions[sortByOption];
});
}
答案 1 :(得分:0)
因为addAll
定义为:
addAll(Collection<? extends E> c)
它只能将集合作为参数。 coins
不是一个集合。
当你这样做时:
for(Coin coin : coins)
myCoins.add(coin)
这很好,因为您正在为Coin
添加List<Coin>
引用。
答案 2 :(得分:0)
myCoins = Arrays.asList(coins); //好的
Arrays.asList(E)返回List,您将其分配给ArryaList
myCoins.addAll(Arrays.asList(硬币)); //好的
集合方法addAll将Collection作为第一个参数。 Arrays.asList返回一个集合 来自收藏的javadocs - &gt; addAll(Collection c)
myCoins.addAll(硬币); //不行
硬币是代码中的变种。编译器将varargs视为一个数组。 &#34;&的addAll#34;不以[]为param
for(Coin coin:coins){myCoins.add(coin); //好的
当您遍历硬币阵列并添加每个对象时。