代码所做的是创建数组和链表,并为每个元素提供一个开始。然后,AddMoreItems(list
将对这两个数组运行,并在数组中的某个随机索引处插入一个随机值。它将添加到每个数组的值的数量由用户的输入决定。
private static int amount = 0;
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("Enter amount of elements to add: ");
amount = scan.nextInt();
LinkedList<Integer> linked = new LinkedList<Integer>();
ArrayList<Integer> array = new ArrayList<Integer>();
linked.add(0);
array.add(0);
// Bench mark linked list speed
long start = System.nanoTime();
addMoreItems(linked);
long end = System.nanoTime() - start;
// Bench mark array list speed
long start2 = System.nanoTime();
addMoreItems(array);
long end2 = System.nanoTime() - start2;
System.out.println("Linked list took: " + (end / 1000000.0) + "ms");
System.out.println("Array list took: " + (end2 / 1000000.0) + "ms");
}
public static void addMoreItems(List<Integer> vals) {
Random r = new Random();
for (int i = 0; i < amount; i++)
vals.add(r.nextInt(vals.size()), r.nextInt());
}
因此,从根本上说,人们会认为addmoreItems()
函数返回这两种列表类型所需的时间相同(可能LinkedList
会稍微快一些)。但是,实际的结果似乎表明,ArrayList
比链表快得多,而不管您添加的元素数量如何(您可以在这里尝试一下)。
无论如何,我的猜测是,这可能与缓存有关,而且LinkedList
将为插入的每个单独元素分配内存,而ArrayList
将分配内存块以减少分配次数。
你的期望是不正确的。ArrayList
Javadoc显式地表示(部分)1
add
操作以摊销常数时间运行,也就是说,添加n个元素需要O(n)个时间。所有其他操作都在线性时间内运行(粗略地说)。与LinkedList
实现相比,常数因子较低。
由于常数系数较高,在LinkedList
上的每个Add
操作都比在ArrayList
上的操作稍慢,因此您应该期望ArrayList
更快。
下面是我的测试代码: 产出:
本文向大家介绍java中ArrayList与LinkedList对比详情,包括了java中ArrayList与LinkedList对比详情的使用技巧和注意事项,需要的朋友参考一下 ArrayList,LinkedList都是Collection接口的通用实现方式,两者采用了不用的存储策略,用来适应不同场合的需要。 实现方式 ArrayList的内部采用集合的方式存储数据 唯一需要注意的是对于
问题内容: 我正在学习Java,并且遇到了和的问题。 我有一个称为的对象,该对象具有从另一个名为的类创建的对象的数组列表。 我需要一种方法,其中返回item列表中一个对象的所有信息。 该随意选择的需求。 当我尝试编译时,出现错误,指出System.out.println行说.. 问题答案: 是一个方法,调用在你的return语句之后,因此由于无法访问而无法进行编译。 可能希望将其重写为:
我了解到是作为双链表实现的,它在添加和删除上的性能比好,但在get和set方法上的性能更差。 这是否意味着我应该选择而不是来插入? 我写了一个小测试,发现插入速度更快,那么链表怎么比快呢? 请参考下面我所做的例子。
我正在创建一个gui,可以添加、删除和搜索用户输入的名称。我想知道允许我在arraylist中搜索项目的代码。非常感谢。
-和有什么区别?什么时候使用更好? 我想每个Java开发人员至少在面试中听过一次这个问题。 -如果您希望能够在列表中间插入项目,则首选链表。 从这里 忘了提到插入费用。在LinkedList中,一旦有了正确的位置,插入将花费,而在ArrayList中,插入将上升到-所有超过插入点的元素都必须移动。 从这里 还有更多... 但你有没有尝试过自己复制它?我昨天试了一下,得到了这些结果: 产出: 哦,A