回顾
前面我们学习了List、Map和Set的一些容器,因为许多奇奇怪怪的事情导致这个阶段性的总结距离上一篇文章的发布隔了很长时间才完成。
总结
首先来看,我们学习了List类的容器:ArrayList、LinkedList、Vector和Stack,Map类的:HashMap、Hashtable、LinkedHashMap和TreeMap,Set类容器学习了:HashSet、LinkedHashSet和TreeSet。
但实际上容器还有其他很多种,比如并发类的容器、cow容器(CopyOnWrite)、队列等等是前面学习过程没有涉及的,今后有时间会将学习过程像以前的文章记录下来。
List、Set、Map的区别
List是有序列表,可重复。
Set是无序集合,不可重复。
Map用于存储键值对映射,提供从key到value的映射,key不可重复。
如何选用容器
对于List:
如果需要保证线程安全,使用Vector或Stack,或者考虑COW容器否则使用ArrayList或LinkedList。
ArrayList和LinkedList如何抉择:如果需要快速随机访问List就使用ArrayList,如果想要在增、删、改上具有高性能就使用LinkedList。
对于Set:容器需要保证不可重复性时使用Set。
一般来说使用HashSet就行了,但如果需要保证插入顺序或者访问顺序时可使用LinkedHashSet,如果想要对Set内的元素进行排序则使用TreeMap。
对于Map:需要通过key来访问value时使用Map。
如果需要保证线程安全,使用ConcurrentHashMap(虽然前面的文章没有涉及)、或者Hashtable,如果需要在迭代时保证插入顺序或者访问顺序就使用LinkedHashMap,如果需要对key进行排序就使用TreeMap。
想要使得容器变成线程安全可使用Collections内的synchronized...方法包装容器使其成为线程安全。
初始容量、扩容等的区别对比
容器的底层实现
下一步的计划
首先是填坑,前面也提到了Java容器还有许多没有记录下来的,有时间会像以前系列的文章一样记录下来,包括但不限于:队列、并发容器、COW容器等等。面试过程中问到关于容器的部分如果看完这一系列从零开始的Java容器学习相信已经完全没问题了,今后会出一篇关于容器面试的文章,容器部分有好的面试题欢迎私聊或者在评论区留言。
容器只是Java语言基础的一小部分,我选择从这开始记录是因为容器这部分是具体形象的,而且涉及到的数据结构与算法部分也有基础,今后关于Java基础将有一系列新的文章,IO、基础语法、面向对象、异常、反射、注解等等。
除了语言基础,还有Java的JVM和并发/多线程部分,将来也会写一系列文章来记录学习的过程。
除了以上部分,还需学习数据结构与算法、操作系统、计算机网络、设计模式、数据库等相关的知识点。学习了基础、内功、理论知识部分,还要学习JavaWeb开发主流的框架:Spring家族,以及各种中间件如Redis、MQ等等,下一步就是微服务部分了。在后端学习的过程中,感兴趣的话也可以学一些前端部分的知识,前端三大件(HTML+CSS+JavaScript)、以及流行的框架VUE/React以及UI库ElementUI。
有任何想法或疑问欢迎私聊或者评论区留言,有时间会回复,以及如果您觉得这篇文章、这系列文章对您有收获,还请点击下方的点赞按钮,感激不尽。