List原理
ArrayList:
ArrayList是一个可变数组实现,实现了List接口的所有方法,并允许存取null值.ArrayList基本上等同与Vector,但它只对writeObject()和readObject()进行了同步.
1. ArrayList使用一个Object的数组存储元素.private transient E[] elementData; 序列化是为了反序列化,当你反序列化时,这些对象的引用已经不可能指向原来的对象了.所以要 手工对ArrayList的元素进行序列化操作,这就是writeObject()的作用.
2.自动变长机制。每个add()方法中,都首先调用一个ensureCapacity(int miniCapacity)方法,这个方法保证elementData数组的长度不小于miniCapacity,ArrayList的自动变长机制就 是在这个方法中实现的.每次扩容都扩大到原来的1.5倍。
3.快速失败迭代器。在父类AbstractList中定义了一个int型的属性:modCount,记录了ArrayList结构性变化的次数.在ArrayList的所有涉及结构变化的方法中都增加modCount的值,包 括:add(),remove(),addAll(),removeRange()及clear()方法.这些方法每调用一次,modCount的值就会加1. 注:add()及addAll()方法的modCount的值是在其中调用的 ensureCapacity()方法中增加的.目的就是检测出现问题时,及时报告错误,抛出异常。
LinkedList:
LinkedList 是基于链表实现的.所以在类中包含了 first 和 last 两个指针(Node)。Node 中包含了上一个节点和下一个节点的引用,这样就构成了双向的链表。链表的基本特性是插入速度快(要大量数据才能比ArrayList有优势),遍历速度慢。
1.迭代器的快速失败.
详细链接:http://blog.csdn.net/zheng0518/article/details/42198599
最新文章
- 开源遥感平台opticks插件开发指南
- Only one statement is allowed per batch. A batch separator, such as 'GO', might be required between statements.
- NYOJ题目889求距离
- ZOJ 2753 Min Cut (Destroy Trade Net)(无向图全局最小割)
- 【树莓派2B倒腾日志】之安装系统及配置
- 字符串反转实现(C++)
- 【HDOJ】1903 Exchange Rates
- JavaScript基础:创建对象
- raft协议安全性保证
- linux libpcap的性能问题,请大家注意绕行。
- 集群技术(二) MySQL集群简介与配置详解
- 定义范围中的备选方案生成、横向思维、创建WBS、工作包定义、WBS、确认范围过程和实施质量过程的关系、联合应用设计和质量功能展开QFD
- vue 项目中引用百度地图
- Android studio 远程服务调用
- 详解angular2组件中的变化检测机制(对比angular1的脏检测)
- sqlserver2008R2 全日志恢复 实例操作
- 30个redis.conf 配置项说明
- Win32 实现 MFC CFileDialog 对话框
- xgCalendar在ASP.NET中的使用
- java基础-day4