Arrays.AsList和addAll

时间:2018-04-15 19:41:43

标签: java

有人可以向我解释什么是差异?

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);

这种方式与我上面提到的不同

请帮助我,并向我解释

3 个答案:

答案 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); //好的

     
    

当您遍历硬币阵列并添加每个对象时。