回忆java来时路-第六章 集合类的演进
来源:互联网 发布:苹果cms论坛 编辑:程序博客网 时间:2024/04/27 15:35
记得早期的java开发者经常使用的集合类是vector和hashtable,它们都是线程安全的,由于同步会消耗资源,因此他们的执行速度要稍慢。很多情况下我们使用集合类并不需要保证线程安全的特性,因此后来又出现了对应的非线程安全的版本ArrayList和HashMap。后来随着concurrent包的加入,又发展出来ConcurrentHashMap等集合类,使我们有了更多的选择,当然性能和安全性上得到综合提高。
1) 先来看看集合类的继承关系树
从这个图中可以看出,Set和List都继承自共同的Collection接口
Vector是List的子类
Map是独立于Collection的接口,也就是说它不支持Collection的一些集合操作(比如iterator)
2)然后我们来看看一些具体子类的特性
Map:是一种key-value的健值数据结构
HashMap:按hash算法存储和访问的map结构,插入和查询速度较快
TreeMap:保证元素有序存储的map结构,速度上比Hashmap慢点
Hashtable:线程安全的map实现,因此速度会较慢
ConcurrentHashMap:并发专用的hashmap,即线程安全,速度也较Hashtable快
List:里面的元素可以重复。
ArrayList:随机访问和存储,插入相对比较慢,查询相对比较快
LinkedList:链表结构的存储和访问,插入比较快,查询比较慢
Vector:和ArrayList类似,不过是线程安全的,效率更低点。
Set:里面的元素都具有唯一性,不会有相同的元素。
HashSet:内部是通过HashMap来存储和访问,不保证有顺,源代码中map是实际存储的容器。
TreeSet:内部是通过NavigableMap来实现,和TreeMap类似,保证存储元素是有序的
3)各个集合类的访问、插入、自动扩容、缩容。
Vector、ArrayList、HashSet、HashMap都可自动扩容,当已使用的空间超过全部空间的一定比例时,就申请扩大一倍的空间来存储,此时会有copy迁移元素到新位置的工作。
TreeMap,TreeSet,linkedSet,linkedHashMap这些因为不需要事先有个固定的容量,也就不存在所谓扩容问题,都是按需增加。
Vector、ArrayList都是可以通过下标随机访问,而linked的要通过链表遍历查找来访问。
0 0
- 回忆java来时路-第六章 集合类的演进
- 回忆java来时路-第七章 类的初始化
- 回忆java来时路-第二章 对象之外
- 回忆java来时路-第三章 谈谈java相关的书籍
- 回忆java来时路-第四章 接口还是抽象类
- 回忆java来时路-第一章 关于那个美好的梦:“一次编写,到处运行”
- 回忆java来时路-第五章 正常地处理异常
- 来时路
- 【java基础】集合类及其数据结构回忆总结
- 第1章 Java的I/O演进之路
- java的IO演进之路
- 夜深时候,翻看来时的路
- 回忆起来时的路,我将去往何处
- 回首来时的路!2014-2015总结
- java学习笔记(第六章集合)
- 回忆Java之路
- java 孙鑫 第六课(第一部分) Java 中的集合类的讲解
- Java的I/O演进
- Linux设备驱动模型-Ktype
- 程序员如何减少代码的BUG量
- Cadence 17.2 Padstack Editor入门指南(1)
- C++中重写与覆写(虚函数virtual)的区别
- Android系统服务管理者大全
- 回忆java来时路-第六章 集合类的演进
- iOS项目中集成ijkplayer框架
- 前端复习--图片加载
- ArrayList
- RNN以及LSTM的介绍和公式梳理
- 轻量级嵌入式web服务器 --libhttpd
- 传值、传址与引用的区别
- oracle服务启动后又停止
- org.springframework.web.bind.annotation 注解详解