ArrayList addAll 方法

x33g5p2x  于2021-10-21 转载在 Java  
字(3.6k)|赞(0)|评价(0)|浏览(378)

在本文中,我们将研究 ArrayList addAll 方法。 ArrayList addAll() 方法用于将参数集合的所有元素附加到列表的末尾。

ArrayList addAll() 方法

与 ArrayList add() 方法类似,ArrayList 中的 addAll() 方法会自动为我们处理许多事情。

  • 它将确保它有足够的空间。请记住,ArrayList 是一个动态数组。
  • 如果没有足够的空间,它将通过创建一个新数组并将旧数组复制到新数组来为底层数组添加更多空间。
  • 最后,它将新集合添加到列表的末尾。

这是JDK中ArrayList add方法的签名

public boolean addAll(Collection << ? extends E > c) {
     return addAll(this.size, c);
 }

 public boolean addAll(int index, Collection << ? extends E > c) {
     rangeCheckForAdd(index);
     int cSize = c.size();
     if (cSize == 0)
         return false;
     checkForComodification();
     root.addAll(offset + index, c);
     updateSizeAndModCount(cSize);
     return true;
 }

JDK 内部使用 List 的大小来查找索引并将集合添加到现有列表的末尾。

1。 ArrayList addAll(Collection <? extends E> c) 示例

ArrayList addAll(Collection<? extends E> c) 方法将集合的所有元素添加到列表的末尾,按照它们由 /* 指定集合的​​迭代器返回的顺序。让我们看一下下面的例子,以便更好地理解。

List < String > list = new ArrayList < > ();
list.add("Sunday");
list.add("Monday");
list.add("Tuesday");

<strong>//output</strong> 
<strong>[Sunday, Monday, Tuesday]</strong>

List < String > newList = new ArrayList < > ();
newList.add("Wednesday");
newList.add("Thursday");
newList.add("Friday");
newList.add("Saturday");

//merge both list
list.addAll(newList);

<strong>//output</strong>
<strong>[Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday]</strong>

请注意,如果我们在操作进行时更改了指定的集合,则此操作的行为未定义

2。 Arrays.asList 和 addAll() 方法

如果我们尝试将元素添加到 Arrays.asList 方法生成的列表中,ArrayList addAll() 方法将抛出 UnsupportedOperationException。让我们看看下面的例子:

List < String > list = Arrays.asList("Sunday", "Monday", "Tuesday");

List < String > newList = new ArrayList < > ();
newList.add("Wednesday");
newList.add("Thursday");
newList.add("Friday");
newList.add("Saturday");

list.addAll(newList);

如果我们运行上面的例子,你会得到java.lang.UnsupportedOperationException。发生这种情况的原因如下

  1. Arrays.asList:返回由指定数组支持的固定大小列表。
    1.我们不能改变结构,即我们不能从列表中添加/更改/删除元素。

3。 ArrayList addAll(int index, Collection<? extends E> c) 示例

如果我们想在 ArrayList 的指定位置添加集合,我们可以使用 addAll(int index, Collection c) 将输入添加到列表的特定位置。此方法将执行以下任务。

  • 移动当前在该位置的元素(如果有)。
  • 将任何后续元素向右移动(增加它们的索引)。
List < String > list = new ArrayList < > ();
list.add("Sunday");
list.add("Monday");
list.add("Tuesday");

<strong>//output</strong>
<strong>[Sunday, Monday, Tuesday]
</strong>
List < String > newList = new ArrayList < > ();
newList.add("Wednesday");
newList.add("Thursday");
newList.add("Friday");
newList.add("Saturday");

//merge both list
list.addAll(1, newList);

<strong>//output
[Sunday, Wednesday, Thursday, Friday, Saturday, Monday, Tuesday]</strong>

4。完整示例

让我们看看我们在本文中讨论的两个用例的完整示例:

public class ArraylistAddAllExample {
    public static void main(String[] args) {

        List < String > list = new ArrayList < > ();
        list.add("Sunday");
        list.add("Monday");
        list.add("Tuesday");

        //new list
        List < String > newList = new ArrayList < > ();
        newList.add("Wednesday");
        newList.add("Thursday");
        newList.add("Friday");
        newList.add("Saturday");

        //add list at the end of current list
        list.addAll(newList);

        //output
        //[Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday]

        //Add All example at a certain index
        List < Integer > integers = new ArrayList < > ();
        integers.add(1);
        integers.add(100);
        integers.add(20);

        //create new list
        List < Integer > integerList = new ArrayList < > ();
        integerList.add(1000);
        integerList.add(10);

        integers.addAll(1, integerList);

        //output
        [1, 1000, 10, 100, 20]
    }
}

概括

在本文中,我们学习了 ArrayList addAll 方法。 我们看到了如何使用 addAll() 方法将参数集合的所有元素追加到列表的末尾。我们还看到了如何将集合元素附加到列表中的特定索引。

相关文章