登录  /  注册
首页 > Java > java教程 > 正文

分享ArrayList中的几个常用方法的源码

零下一度
发布: 2017-06-28 09:41:47
原创
1641人浏览过

jdk1.7.0_79 

  上文里解析了有关ArrayList中的几个常用方法的源码——《有关ArrayList常用方法的源码解析》,本文将对LinkedList的常用方法做简要解析

  LinkedList是基于链表实现的,也就是说它具备了链表的优点和缺点,随机访问慢、插入删除速度快。既然是链表,那么它就存在节点数据结构,也不存在容量大小的问题,来一个在尾部添加一个。

//LinkedList$Nodeprivate static class Node<e> {
    E item;
    Node<e> next;
    Node<e> prev;

    Node(Node<e> prev, E element, Node<e> next) {this.item = element;this.next = next;this.prev = prev;
    }
}</e></e></e></e></e>
登录后复制

  第一个默认不带参数的构造方法,构造一个空链表。

//1.LinkedList,默认构造方法public LinkedList() {
}
登录后复制

  第二个构造方法能把一个集合作为一个参数传递,同时集合中的元素需要是LinkedList的子类

//2.LinkedList,能将一个集合作为参数的构造方法public LinkedList(Collection extends E&gt; c) {this();
    addAll(c);
}
登录后复制

  两个构造方法都比较简单,接下来看元素的插入及删除等方法。

public boolean add(E e) {
    linkLast(e);    //将元素添加到链表尾部return true;
}
登录后复制
//LinkedList#linkLastvoid linkLast(E e) {final Node<e> l = last;    //链表尾指针引用暂存final Node<e> newNode = new Node(l, e, null);    //构造新节点last = newNode;    //将链表的尾指针指向新节点if (l == null)    //此时为第一次插入元素first = newNode;elsel.next = newNode;    
    size++;    //链表数据总数+1modCount++;    //modCount变量在《有关ArrayList常用方法的源码解析》提到过,增删都会+1,防止一个线程在用迭代器遍历的时候,另一个线程在对其进行修改。}</e></e>
登录后复制

  学过《数据结构》的同学相信看到链表的操作不会感到陌生,接着来看看删除指定位置的元素remove(int)方法。

 

//LinkedList#removepublic E remove(int index) {
    checkElementIndex(index);    //检查是否越界 index &gt;= 0 &amp;&amp; index 
登录后复制

 

//LinkedList#node,根据索引位置返回Node节点Node<e> node(int index) {if (index &gt; 1)) {    //size &gt;&gt; 1 = size / 2,如果索引位于链表前半部分,则移动fisrt头指针进行查找Node<e> x = first;for (int i = 0; i  x = last;for (int i = size - 1; i &gt; index; i--)
            x = x.prev;return x;
    }
}</e></e>
登录后复制

  查找到index位置的Node,调用unlink方法摘掉该节点

//LinkedList#unlink,一看即懂E unlink(Node<e> x) {// assert x != null;final E element = x.item;final Node<e> next = x.next;final Node<e> prev = x.prev;if (prev == null) {
        first = next;
    } else {
        prev.next = next;
        x.prev = null;
    }if (next == null) {
        last = prev;
    } else {
        next.prev = prev;
        x.next = null;
    }

    x.item = null;
    size--;
    modCount++;return element;
}</e></e></e>
登录后复制

  从代码中就能看出LinkedListArrayList两者的优缺点,由于只涉及简单的链表数据结构,所以不再对其他方法进行解析。

 

以上就是分享ArrayList中的几个常用方法的源码的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号