我有一个问题,在开始时使用列表中的许多插入,然后广泛使用搜索和检索操作,那么哪种方法是好的和有效的?
方法1: 使用LinkedList
作为整个程序的数据结构。
方法2: 使用ArrayList
作为整个程序的数据结构。
方法3: 在开始时使用LinkedList
作为我的数据结构进行插入
Arraylist al = new Arraylist(ll);
用于检索操作。
数据结构的变化成本是多少?它真的值得吗?
答案 0 :(得分:5)
由于它们都实现了相同的接口,因此您可以通过编写代码来自行查找,以便可以插入构造函数并以两种方式测试代码。可以使用jmh进行基准测试。
您可以使用Supplier界面插入构造函数。
根据问题的性质,您可能会发现使用Deque是合适的。
答案 1 :(得分:2)
它取决于插入和检索操作的频率。以下是复杂性:
ArrayList
- >在开头插入: O(n) ArrayList
- >基于索引的检索: O(1) LinkedList
- >在开头插入: O(1) LinkedList
- >基于索引的检索: O(i)其中i是要扫描的元素数。因此,如果您的检索数多于插入数,请转到ArrayList
,如果没有,请转到LinkedList
。
答案 2 :(得分:2)
请允许我提出第4种方法:使用ArrayDeque
进行整个计划。它在前面和后面有效插入(可能比LinkedList
更快)和搜索效率,如ArrayList
。 ArrayDeque
是Java Collections Framework中一个不公平被忽视的类,可能是因为它稍后被添加(我认为是Java 6)。 不实现List
接口,因此您必须专门为其编写程序。
除此之外,您问题的唯一两个有效答案是