Vic*_*cky 1 java collections arraylist
LinkedList上的帖子说:
LinkedList允许恒定时间插入或删除,但仅允许元素的顺序访问.换句话说,you can walk the list forwards or backwards, but grabbing an element in the middle需要时间与列表的大小成比例.
我不明白什么才有资格抓住中间的元素?
在下面的代码中,假设arrL是一个包含50个elemnet的LinkedList,当计数器j达到20时,程序执行arrL.get(20)..这是否意味着程序正在抓取中间的元素?同样在下面的程序我只是走向前面的列表,不是吗?
for(int j=0;j<arrL.size();++j){
arrL.get(j);
}
Run Code Online (Sandbox Code Playgroud)
是的,在每次迭代中,您都是从开头到第j个元素遍历列表,因此整体循环性能n^2(非常差).那是因为在每次迭代中你都有独立的get()调用,它具有线性性能.
另一方面,如果使用迭代器,您将一次遍历列表一个元素,在每次迭代中前进一个元素,这要快得多:
for(Iterator<E> iter = arrL.iterator(); iter.hasNext();) {
E e = iter.next();
}
Run Code Online (Sandbox Code Playgroud)
或更好:
for(E k: arrL) {
}
Run Code Online (Sandbox Code Playgroud)
BTW这是一个非常基本的数据结构问题,Java在这里无关......
| 归档时间: |
|
| 查看次数: |
3329 次 |
| 最近记录: |