Java中ArrayList和LinkedList的性能对比实例
在Java中,ArrayList和LinkedList是两种常见的动态数组。它们各自有不同的性能特点,下面通过一个实例来对比它们的性能。
假设我们有一个需要频繁插入和删除元素的场景,这里我们将使用Arrays.fill()
方法填充10,000个元素,并统计插入、删除操作的次数。
- ArrayList:
```java
import java.util.ArrayList;
ArrayList
// … 使用fill()填充元素
// 插入操作示例:
list.add(5); // 添加一个值为5的元素
// 删除操作示例:
int indexToRemove = 2; // 要删除的索引
list.remove(indexToRemove); // 删除指定索引的元素
// 计算插入、删除次数:
List
List
for (Integer value : list) {
if (insertionOperations.contains(value)) {
// 插入操作已存在,忽略
continue;
}
insertionOperations.add(value);
}
// … 同理计算删除次数
int totalInsertions = insertionOperations.size();
int totalDeletions = deletionOperations.size();
System.out.println(“Total Insertions: “ + totalInsertions);
System.out.println(“Total Deletions: “ + totalDeletions);
2. LinkedList:
```java
import java.util.LinkedList;
LinkedList<Integer> linkedList = new LinkedList<>(10_000);
// ... 使用fill()填充元素
// 插入操作示例:
linkedList.add(5); // 添加一个值为5的元素
// 删除操作示例:
int indexToRemove = 2; // 要删除的索引
linkedList.remove(indexToRemove); // 删除指定索引的元素
// 计算插入、删除次数:
List<Integer> insertionOperations = new ArrayList<>();
List<Integer> deletionOperations = new ArrayList<>();
for (Integer value : linkedList) {
if (insertionOperations.contains(value)) {
// 插入操作已存在,忽略
continue;
}
insertionOperations.add(value);
}
// ... 同理计算删除次数
int totalInsertions = insertionOperations.size();
int totalDeletions = deletionOperations.size();
System.out.println("Total Insertions: " + totalInsertions);
System.out.println("Total Deletions: " + totalDeletions);
通过这个实例,你可以看到在频繁插入和删除的情况下,LinkedList的性能通常优于ArrayList。因为LinkedList在内存中的布局更紧凑,可以在常数时间内完成插入和删除操作。而ArrayList则需要移动元素以进行插入或删除,时间复杂度较高。
还没有评论,来说两句吧...