编写一个测试程序,在一个链表上存储500万个整数,测试分别使用interator和使用get(index)方法的遍历时间
时间: 2024-09-25 14:02:43 浏览: 42
编写一个测试程序,比较使用迭代器(Iterator)和通过索引访问(get(index))遍历大规模链表的时间效率,通常涉及创建一个大型链表,然后测量每次操作所需的时间。以下是使用Java的一个简单示例:
首先,我们需要创建一个Node类表示链表节点,以及LinkedList类作为容器:
```java
class Node {
int data;
Node next;
Node(int data) {
this.data = data;
this.next = null;
}
}
class LinkedList {
Node head;
void add(int value) {
if (head == null) {
head = new Node(value);
} else {
Node current = head;
while (current.next != null) {
current = current.next;
}
current.next = new Node(value);
}
}
}
```
接着,我们可以创建两个方法,一个使用迭代器,另一个使用索引访问:
```java
import java.util.Iterator;
public class PerformanceTest {
private static final int SIZE = 5_000_000;
private LinkedList linkedList;
public PerformanceTest() {
linkedList = new LinkedList();
for (int i = 0; i < SIZE; i++) {
linkedList.add(i);
}
}
// 使用迭代器遍历
private long iteratorTraversalTime() {
long start = System.nanoTime();
Iterator<Node> iterator = linkedList.head.iterator();
while (iterator.hasNext()) {
iterator.next();
}
return System.nanoTime() - start;
}
// 使用索引访问遍历
private long indexTraversalTime() {
long start = System.nanoTime();
for (int i = 0; i < SIZE; i++) {
linkedList.get(i);
}
return System.nanoTime() - start;
}
public static void main(String[] args) {
PerformanceTest test = new PerformanceTest();
double iteratorTime = test.iteratorTraversalTime() / 1e9; // 转换为秒
double indexTime = test.indexTraversalTime() / 1e9;
System.out.printf("Iterator traversal time: %.2f seconds\n", iteratorTime);
System.out.printf("Index traversal time: %.2f seconds\n", indexTime);
}
}
```
运行这个程序,你会得到两种遍历方式的平均时间。需要注意的是,这只是一个基础示例,实际结果可能受到系统性能、JVM优化等多种因素的影响。如果你需要更精确的结果,可能还需要多次测试并计算平均值。
阅读全文