JDK7中的LinkedList中的addAll会先将要添加的Collection做toArray转化,然后在去迭代toArray后的数组进行添加操作,为什么不直接迭代Collection呢?难道只为了多线程下直接迭代Collection会有异常而进行这样的转化吗?
JDK7的代码如下:
public boolean addAll(int index, Collection<? extends E> c) {
checkPositionIndex(index);
Object[] a = c.toArray();
int numNew = a.length;
if (numNew == 0)
return false;
Node<E> pred, succ;
if (index == size) {
succ = null;
pred = last;
} else {
succ = node(index);
pred = succ.prev;
}
for (Object o : a) {
@SuppressWarnings("unchecked") E e = (E) o;
Node<E> newNode = new Node<>(pred, e, null);
if (pred == null)
first = newNode;
else
pred.next = newNode;
pred = newNode;
}
if (succ == null) {
last = pred;
} else {
pred.next = succ;
succ.prev = pred;
}
size += numNew;
modCount++;
return true;
}
相关推荐
3. 自定义转换:如果你需要转换成其他类型的`Collection`(如`ArrayList`或`LinkedList`),可以通过迭代遍历数组并调用`add()`方法实现。 **从Collection转换到Array** 1. **toArray()**: `Collection`接口提供了...
要将一个基本类型的数组转换为`ArrayList`,我们可以使用`Arrays.asList()`方法,然后通过`ArrayList`的构造函数创建一个新的实例。以下是一个例子: ```java int[] intArray = {1, 2, 3, 4, 5}; List<Integer> int...
对于List接口的实现类,如ArrayList或LinkedList,我们可以直接将列表传递给Set,Set会自动去重。 ```java List<Integer> list = new ArrayList(); list.add(1); list.add(2); list.add(3); list.add(2); list.add(1...
- `LinkedList`:同样实现了 List 接口,提供了基于双向链表的数据结构。 - **Set接口**:Set 不允许重复元素,它代表一组不重复的值。 - `HashSet`:实现了 Set 接口,提供了一种高效的查找方式,不允许重复元素...
第二种方法使用了`List`接口的实现类`LinkedList`,以及`Arrays.asList()`方法。首先,将字符串数组转换为`List`,然后创建一个新的`LinkedList`,遍历原列表,如果新列表中不存在当前元素,则将其添加。最后,将...
- **方法**:Array内置方法较少,ArrayList提供更多的操作方法如addAll、removeAll等。 4. **线程安全的集合**: - **线程安全**:Vector、HashTable和Stack是线程安全的,而HashMap等非线程安全,可以使用...
虽然`ArrayList`实现了`Cloneable`接口,但是`LinkedList`并没有实现`Cloneable`接口。另外,两者确实都提供了两个构造函数,一个无参构造函数,一个接收`Collection`类型的构造函数。 **8. Map接口不是Collection...
- 具体实现类如 `ArrayList`、`LinkedList` 实现 `List` 接口,`HashSet`、`TreeSet` 实现 `Set` 接口。 - `Map` 接口则由 `HashMap`、`TreeMap` 等实现。 #### 四、List 接口 List是一个有序的集合,它允许重复...
Java集合框架还包含了一些直接或间接实现`Collection`接口的类,例如`ArrayList`、`LinkedList`、`HashSet`、`TreeSet`等。这些类提供了不同的性能特性和用途,比如: - **ArrayList**:基于数组实现,适合于随机...
常见的List实现包括ArrayList和LinkedList。 - **Set**:不允许有重复元素,保持元素的唯一性。HashSet是最常见的Set实现。 - **Queue**:遵循先进先出(FIFO)原则,用于处理等待处理的元素序列。例如,...
9. `Arrays.asList()`将数组转换为List,`Collections.addAll()`将多个元素添加到集合中。 10. ArrayList与Vector都是动态数组,但ArrayList是非线程安全的,性能更好。 11. Array是固定大小的原始类型数组,...
dest.addAll(src); // 正确:dest被推断为List } ``` 这里,`dest`的类型被自动推断为`List<? super E>`,这使得我们可以向`dest`添加任何类型的数据,只要这些数据是`E`的超类型。 #### 将遗留代码转换为使用...
26. 使用`ArrayList.addAll()`或`System.arraycopy()`实现数组与List的转换。 27. ArrayList和Vector都是基于数组实现,但ArrayList是非线程安全的,性能更好;Vector是线程安全的,但性能较差。 28. Array是C/C++...
使用LinkedList实现表达式存储 - **LinkedList类**:在Java标准类库的`java.util`包中定义,可以动态地增加或减少元素数量。 - **构造方法与常用方法**: - `public LinkedList()` - `public Object getFirst()` ...
正确做法是先转换为字符串再输出,如`System.out.println(Arrays.toString(intArray));` 3. **数组转ArrayList** 可以通过`Arrays.asList()`将数组转换为ArrayList,然后创建新的ArrayList对象:`ArrayList...
#### 一、数组(Array) **数组定义**: 数组是一种基本的数据结构,用于存储相同类型的多个元素。数组是Java中最简单且高效的容器之一,能够提供快速的元素访问。 **特点**: - **访问速度快**: 允许随机访问元素。 -...
ArrayList是Java集合框架中常用的列表实现之一,它是一个基于数组实现的动态列表。ArrayList的特点在于其容量能够随着元素数量的增长而自动扩展。下面我们将详细探讨ArrayList的各个方面。 1. **ArrayList的特性** ...
- 使用`List`接口的`add(index, element)`方法代替`Collections.addAll(list, elements...)`,后者会创建一个额外的数组。 - 使用`ArrayList`而非`LinkedList`,除非频繁进行插入和删除操作,因为在随机访问上`...
这在之前需要写成`Map, String> map = new HashMap, String>();` 4. **Strings in Switch语句** Java 7允许在switch语句中直接使用字符串,使得switch语句更加灵活,例如: ```java String day = "Monday"; ...