Java Collections API源码分析

侯捷老师剖析了不少Framework,如MFC,STL等。侯老师有句名言:

源码面前,了无秘密

这句话还在知乎引起广泛讨论。

我对教授程序设计的一点想法是:

同学们开始不会编程,最好的学习方式是读教材,敲代码,我还专门写了一篇博客指导同学们敲代码:《积极主动敲代码,使用Junit学习Java程序设计》,我认为阅读经典图书,积极主动敲5000行左右的代码,应该能解决语言基本语法的问题,基本程序设计的问题,基本工具(git,jdb,junit,idea...)的使用问题

然后同学们应该独立编写5000行左右的代码,解决程序逻辑错误的调试,模块分解,数据结构与选用,问题解决的一般过程等相关问题

有了10000行代码的基础,后面的学习提高要依靠代码阅读了,比如JUnit的源码,JHotdraw的源码,Java Collection API的源码,Java JCE的源码等

教学中也是想通过这三个步骤进行训练。

我们这学期主要讲数据结构,希望同学们在学习时能分析一下Java Collection的源代码。

侯捷老师在《STL源码剖析(jjhou)》一书中说:

我开玩笑地对朋友说,这本书出版,给大学课程中的“数据结构”和“算法”两门授课老师出了个难题。几乎所有可能的作业题目(复杂度证明题除外),本书都有了详尽的解答。然而,如果学生能够从庞大的 SGI STL 源码中干净抽出某一部份,加上自己的包装,做为呈堂作业,也足以证明你有资格获得学分和高分。事实上,追踪一流作品并于其中吸取养份,远比自己关起门来写个三流作品,价值高得多 — 我的确认为99.99 % 的程序员所写的程序,在 SGI STL 面前都是三流水准。

我相信绝大多数程序员用Java实现的数据结构和算法,相当于Java Collection API也是三流水准,希望同学们通过代码分析学习一流代码的实现方法,技巧等。

侯捷老师在《STL源码剖析(jjhou)》一书中说:

源码之前了无秘密,你将看到vector的实现、list的实现、heap的实现、deque的实现、RB-tree的实现、hash-table的实现、set/map 的实现;你将看到各种算法(排序、搜寻、排列组合、数据移动与复制…)的实现;你甚至将看到底层的memory pool 和高阶抽象的traits 机制的实现。那些数据结构、那些算法、那些重要观念、那些编程实务中最重要最根本的珍宝,那些蜇伏已久彷佛已经还给老师的记忆,将重新在你的脑中闪闪发光。

我希望同学们在分析Java Collection API源码时有相同的收获。

代码阅读和分析同学们可以重点参考一下侯捷老师的上穷碧落下黄泉-源码追踪经验谈,文章要点是:

不要"一切从轮子造起",参考相关图书,博客

要做笔记

需要的基础自己要打牢

大家也可以参考:

源码下载

安装JDK时,选中“源代码":

安装完就会出一个src.zip的文件,解压了就包含Java Collections API的源码:

这些代码在java.util包中:

总览

ArrayList

参考资料

如果你觉得本文对你有帮助,请点一下左下角的“好文要顶”和“收藏该文”

java 源代码 分析_Java Collections 源码分析相关推荐

  1. Java 常用工具类 Collections 源码分析

    文章出处 文章出自:安卓进阶学习指南 作者:shixinzhang 完稿日期:2017.10.25 Collections 和 Arrays 是 JDK 为我们提供的常用工具类,方便我们操作集合和数组 ...

  2. spring源码分析第一天------源码分析知识储备

    spring源码分析第一天------源码分析知识储备 Spring源码分析怎么学? 1.环境准备: 2.思路    看:是什么? 能干啥    想:为什么?     实践:怎么做?         ...

  3. k8s client-go源码分析 informer源码分析(3)-Reflector源码分析

    k8s client-go源码分析 informer源码分析(3)-Reflector源码分析 1.Reflector概述 Reflector从kube-apiserver中list&watc ...

  4. java地图源码_Java集合源码分析(四)HashMap

    一.HashMap简介 1.1.HashMap概述 HashMap是基于哈希表的Map接口实现的,它存储的是内容是键值对映射.此类不保证映射的顺序,假定哈希函数将元素适当的分布在各桶之间,可为基本操作 ...

  5. java io源码解读_Java IO源码分析(五)——CharArrayReader 和 CharArrayWriter

    简介 CharArrayReader 是字符数组的输入流,它和我们之前讲的ByteArrayInputStream十分类似,顾名思义,区别在于一个用于字符数组,一个用于字节数组,在Java中字符是16 ...

  6. Java集合篇:LinkedList源码分析

    (注:本文内容基于JDK1.6) 一.概述: LinkedList与ArrayList一样实现List接口,只是ArrayList是List接口的大小可变数组的实现,LinkedList是List接口 ...

  7. Java并发编程之ThreadLocal源码分析

    1 一句话概括ThreadLocal   什么是ThreadLocal?顾名思义:线程本地变量,它为每个使用该对象的线程创建了一个独立的变量副本. 2 ThreadLocal使用场景   用一句话总结 ...

  8. 死磕java并发cas_死磕 java并发包之AtomicInteger源码分析

    问题 (1)什么是原子操作? (2)原子操作和数据库的ACID有啥关系? (3)AtomicInteger是怎么实现原子操作的? (4)AtomicInteger是有什么缺点? 简介 AtomicIn ...

  9. java多线程系列:ThreadPoolExecutor源码分析

    前言 这篇主要讲述ThreadPoolExecutor的源码分析,贯穿类的创建.任务的添加到线程池的关闭整个流程,让你知其然所以然.希望你可以通过本篇博文知道ThreadPoolExecutor是怎么 ...

最新文章

  1. 找论文太难?试试这款「文本生成」论文搜索工具丨开源
  2. andriod 接入mqtt_Android 连接阿里云 mqtt失败
  3. linux shell curl 超时与重试
  4. jquery的$.extent()方法的总结
  5. 由Google Protocol Buffer的小例子引起的g++编译问题
  6. Intent中的Flag
  7. 【转载】架构师的行为准则(三)
  8. MATLAB画简单函数图形
  9. 单片机内存及内存映射(本地地址,逻辑地址,全局地址)
  10. 定时器工作原理及其应用
  11. 【NOIP2017提高A组集训10.25】凤凰院凶真(dp)
  12. 中级程序员晋升高级程序员,只差这几个技能
  13. 华为笔记本linux双系统,真的有必要吗?华为笔记本搭载双系统
  14. 高度坍塌的产生条件和解决方法
  15. 忆过去 想未来 人有情
  16. word插入对勾对号
  17. LinuxC:锁、条件变量、信号量实现线程间的同步 生产者与消费者 pthread_mutex_init pthread_cond_init sem_init
  18. mysql数据库下订单功能项目_订单功能模块设计与实现
  19. 微信小程序自定义组件制作图表动画
  20. 大数据开源的可视化分析工具,主要有哪些?

热门文章

  1. DeepAR:Probabilistic forecasting with autoregressive recurrent network
  2. 编程中的代码能看懂。。但是让自己写却写不出来。应该怎么办? 要有效果的方法...
  3. The Devil Wears Prada-18
  4. 辛巴学院-Unity-剑英陪你零基础学c#系列(二)顺序
  5. javascript重要事件总结(onsubmit/onclick/onload/onfocus/onblur/onmouseover/onmouseout)
  6. 2021年JAVA面试~初识集合Map(二)
  7. GIS理论知识(六)之底图数据的来源
  8. 如何安装谷歌浏览器驱动(Google Chromedriver)
  9. 投资理财的十大经典电影
  10. Git强推本地代码到远程