java集合源码分析
来源:互联网 发布:坐船去美国 知乎 编辑:程序博客网 时间:2024/06/05 17:57
2.集合中存放的都是对象的引用而不是对象本身。集合中不能放入原生数据类型,要放入原生数据类型,可以将其转化成包装类型后再放入,不过JDK1.5出现了自动的装箱和拆箱,原生数据类型可以直接放入,java自动会将原生数据类型包装成包装类型后放入。
3.ArrayList底层代码如下:
由上面代码可以看到ArrayList的带参数的构造方法就是new了一个传入长度的Object数组,而不带参数的构造方法就是默认new一个长度为10的Object数组。因此ArrayList的底层就是一个Object数组。
以上的add方法,先判断size 1是否大于了ArrayList底层数组的最大容量,如果大于,那么将新new一个长度是原来长度的3/21长度的数组,然后再将原数组copy到新数组中去。将新数组保存到底层数组中
5.ArrayList中还提供了可以转成数组的方法,如下:
6.ArrayList中提供了删除某一位置的元素的方法如下
7.ArrayList类中提供的获取某一位置的元素的方法比较简单如下:
8.由上面的源码可以看出来ArrayList就是利用数组实现的一个轻量级的集合,该集合是线程不安全的,如果在多线程的环境中使用,需要自行考虑线程安全问题。
9.Vector(向量)和ArrayList差不多,都是继承自AbstractList,底层都是用数组实现的,
10.Stack(栈):栈是一种先进后出的集合,直接继承自Vector,所有也是线程安全的。先进先出就是一个只有一头开口的盒子,放进一个东西就放在最里面了,要拿出来只能
有很多的情况是不希望出现这样的结果的,那么使用这个Stack后,就必须注意不要在原数据上修改了。也可
3)移除并返回栈顶的元素:pop()是移除栈顶的一个元素的方法,也就是移除栈中最后压入的一个元素
4)判断栈中是否为空:empty()是判断栈中是否为空
5)搜索栈中的元素:search(Object o),返回一个元素的位置,栈顶位置为1.
11.LinkedList(链接列表):链接列表底层是数据结构中的链表结构。
12.单向链表示意图如下
如图所示单项链表是一个数据加上后一个数据的引用一对对出现的,一个是本身数据还有一个是指向它的后继元素的引用。用代码表示一个简单的链表如下:
13.循环链表的示意图如下所示
14.双向循环链表示意图如下
比单向链表多了一个前面的引用,既有指向前驱的元素的引用又有指向后继元素的引用
15.LinkedList的底层主要代码如下:
16.由上源码可以分析比较出ArrayList和LinkedList的区别:
2)当执行插入或者删除操作时,采用LinkedList效率比较高,它只需要改变它前后两个元素的后继和前驱
3)当执行搜索操作时,ArrayList效率较高,
4)当向ArrayList添加一个对象时,实际上是将该对象的引用放置到了ArrayList底层所维护的数组中;而
}
17.和List不同Set是一类不包含重复元素的集合,实现该接口的主要几个类是HashSet,LinkedHashSet和TreeSet。这些类在介绍了映射后再看就简单了,这里先不做介绍。
18.集合的遍历:集合的遍历主要有三种方式:
19.关于集合遍历的时候删除满足特定条件的元素的问题
20.对于各种遍历方式的粗略的性能试验:
(进行20次左右测试)运行结果如下
- java集合源码分析
- Java集合源码分析
- java 集合类源码分析
- Java集合-ArrayList源码分析
- 【java集合】ArrayList源码分析
- 【java集合】LinkedList源码分析
- JAVA集合源码分析系列:ArrayList源码分析
- JAVA集合源码分析系列:LinkedList源码分析
- JAVA集合源码分析系列:HashMap源码分析
- JAVA集合源码分析系列:HashSet源码分析
- JAVA集合源码分析系列:TreeSet源码分析
- JAVA集合源码分析系列:TreeMap源码分析
- JAVA集合源码分析系列:LinkedList源码分析
- 【Java集合类源码分析】ArrayList源码分析
- 【Java集合类源码分析】LinkedList源码分析
- 【Java集合类源码分析】Vector源码分析
- 【Java集合类源码分析】HashMap源码分析一
- 【Java集合类源码分析】HashMap源码分析二
- mysql超一亿条记录中快速查询总记录条数
- Bootstrap—后台框架Ace
- Oracle 创建存储过程以及PlSql 调用 存储过程
- 查看Linux系统端口占用情况
- Java IO流 学习笔记
- java集合源码分析
- Block的一些简单理解
- Tomcat 7 + Java 8 : Invalid byte tag in constant pool: 15
- boost : ref , bind , function
- CoreData 深入理解1
- NSURL包含中文或是不能识别的字符
- WebPack系列教程(十):起步
- 升级yosemite后java出错的解决
- UIResponder