Java 集合基础
来源:互联网 发布:七匹狼授权淘宝网店 编辑:程序博客网 时间:2024/06/15 21:23
ArrayList:
1.允许为空、允许重复、有序、非线程安全
2.底层以elementDate数组实现,初始数组大小为10,扩容是(当前size*3)/2+1
3.顺序插入(在数组尾部直接插入)时速度较快,当在指定位置插入或者删除元素时涉及到数据搬运,速度会较慢。
LinkedList:
1.允许为空、允许重复、有序、非线程安全
2.底层以双向列表实现(每个元素前后都有个引用地址)
3.插入和删除数据时只需查到到数据位置然后改变前后引用,查询时底层实现会判断查找位置大于或小于列表中间位置,确定往前查找还是往后查找。
所以,如果待插入、删除的元素是在数据结构的前半段尤其是非常靠前的位置的时候,LinkedList的效率将大大快过ArrayList,因为ArrayList将批量copy大量的元素;越往后,对于LinkedList来说,因为它是双向链表,所以在第2个元素后面插入一个数据和在倒数第2个元素后面插入一个元素在效率上基本没有差别,但是ArrayList由于要批量copy的元素越来越少,操作速度必然追上乃至超过LinkedList。
从这个分析看出,如果你十分确定你插入、删除的元素是在前半段,那么就使用LinkedList;如果你十分确定你删除、删除的元素在比较靠后的位置,那么可以考虑使用ArrayList。如果你不能确定你要做的插入、删除是在哪儿呢?那还是建议你使用LinkedList吧,因为一来LinkedList整体插入、删除的执行效率比较稳定,没有ArrayList这种越往后越快的情况;二来插入元素的时候,弄得不好ArrayList就要进行一次扩容,记住,ArrayList底层数组扩容是一个既消耗时间又消耗空间的操作。
HashMap:
1.key,value都允许为空、key不能重复否则value值会被覆盖、无序、非线程安全
2.底层以单向列表实现,初始化大小为16的Entry数组,每次扩充为原来的2倍
3.当添加元素key为空时,会放在第一个位置,put操作时会重新计算key的hashCode,HashMap它的顺序是基于HashCode,HashCode是一个随机性很强的数字,所以HashMap中的Entry完全是随机存放的。HashMap又不像LinkedHashMap这样维护了插入元素的顺序
HashTable:
1.key,value都不允许为空、key不能重复否则value值会被覆盖、无序、非线程安全
2.每次扩充为原来的2n+1
3.hashTabel的对外方法都用synchronized修饰了
LinkedHashMap:
entry
连接起来,这样是为保证元素的迭代顺序跟插入顺序相同- [ java ] java基础集合!
- JAVA基础之集合
- java基础之集合
- java基础:集合connection
- java基础之 集合
- java基础10 集合
- java基础--集合
- java基础---集合类
- java基础知识点集合
- java基础 集合迭代器
- JAVA基础之集合
- Java集合框架基础
- java基础--HashSet集合
- java基础_09_集合
- 【Java基础】集合
- Java基础之 集合
- java基础__集合
- JAVA基础集合
- jquery里面的$(this)和this都什么时候用,有什么区别
- Python BeautifulSoup4 搜索部分
- 剖析 git 基础用法
- android之Animation自定义动画轨迹
- JavaScript 正则表达式--replace() 方法
- Java 集合基础
- 文件上传
- wcf 超出max值
- 计蒜客 矩阵翻转
- WCF学习(2) ServiceHost寄宿多个服务
- axios全攻略
- 【转】R-FCN
- 关于spring 结合不同的transaction-manager
- 最小生成树(Prime and Kruskal)