我是靠谱客的博主 自然樱桃,最近开发中收集的这篇文章主要介绍LinkedList中的for循环和迭代器,哪个遍历效率高,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

首先先回答下上面的问题,答案是迭代器,那么很多人就想问下为什么,往下看

@Test
    public void get() {
        List<Integer> ll = new LinkedList<>();

        for (int i=0; i<100000; ++i) {
            ll.add(i);
        }
        long start = System.currentTimeMillis();
        for (int i=0; i<ll.size(); ++i) {
            ll.get(i);
        }
        long end = System.currentTimeMillis();

        Iterator iterator = ll.iterator();
        while(iterator.hasNext()) {
            iterator.next();
        }
        long time = System.currentTimeMillis();

        System.out.println("使用for循环,所花费的时间: " + (end - start));
        System.out.println("使用迭代器,所花费的时间: " + (time - end));

    }

迭代器
从上图的运行结果可以明显地看出来差异啦,迭代器要快,那这个是为啥呢,咱们继续往下看

//这个是使用for循环遍历数据的时候,对应的底层实现,我们可以看到,首先会先根据当前的index,来判断是从前往后遍历,还是从后往前遍历,无论是从前开始还是从后开始遍历,里面都是要走一个for循环,直到走到对应的下标node,然后返回对应的node值
LinkedList.Node<E> node(int index) {
        LinkedList.Node x;
        int i;
        if (index < this.size >> 1) {
            x = this.first;

            for(i = 0; i < index; ++i) {
                x = x.next;
            }

            return x;
        } else {
            x = this.last;

            for(i = this.size - 1; i > index; --i) {
                x = x.prev;
            }

            return x;
        }
    }

//下面这个是使用迭代器遍历的时候,对应的next方法,从这个方法中我们可以明显地看出来,并没有从前往后或者从后往前的循环遍历,所以迭代器遍历的速度要比for循环快
public E next() {
            this.checkForComodification();
            if (!this.hasNext()) {
                throw new NoSuchElementException();
            } else {
                this.lastReturned = this.next;
                this.next = this.next.next;
                ++this.nextIndex;
                return this.lastReturned.item;
            }
        }

综上所述,for循环最主要的遍历瓶颈其实就是,每次通过下标进行访问的时候,都需要遍历链表

最后

以上就是自然樱桃为你收集整理的LinkedList中的for循环和迭代器,哪个遍历效率高的全部内容,希望文章能够帮你解决LinkedList中的for循环和迭代器,哪个遍历效率高所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部