自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 Java8容器源码-目录

从今天开始,就要开始学习Java容器了。本专栏从了解到使用再到源码,详细深入地讲解Java容器(集合)。本专栏主要参考《Think In Java》一书,还有网上的一些技术文章。主要讲解Java容器的使用、源码、优缺点。个人能力有限,难免有考虑不到的地方,如果有哪里不正确,欢迎指出。本专栏参考的JDK版本为1.8。目录目录会随着本专栏的更新而更新。Java8容器源码-...

2017-08-01 20:34:18 6417 5

原创 Spring源码-目录

Spring是与2003年兴起一个轻量级的开源框架,由Rod Johnson创建。其致力于解决企业应用开发的复杂性,是企业应用开发的“一站式”(full-stack)选择。Spring是分层的,它包含大约20个模块,以控制反转(Inverse Of Control,IOC)与面向切面编程(Aspect Oriented Programming,AOP)为核心。

2017-08-01 16:07:41 2436

原创 Java8源码-TreeSet

昨天已经学习了HashSet,今天开始学习TreeSet。TreeSet是依赖于TreeMap的NavigableSet接口的实现,实际上是个TreeMap的实例。如果对TreeMap源码很熟悉,那么学习TreeSet就会很简单了。TreeSet的特点是使用元素的自然顺序对元素进行排序,或者根据创建set时提供的Comparator进行排序。本文将从数据结构、实现原理、源码等多个方面详细讲解Tre...

2017-08-30 21:24:05 1654

原创 Java8源码-HashSet

今天开始学习HashSet。HashSet是依赖于HashMap的Set接口的实现,实际上是个HashMap的实例。如果对HashMap源码很熟悉,那么学习HashSet就会很简单了。HashSet的特点是不保证set的迭代顺序,特别是它不保证该顺序恒久不变,允许使用null 元素。本文将从数据结构、实现原理、源码等多个方面详细讲解HashSet。数据结构HashSet是依赖于Hash...

2017-08-29 21:15:08 1966

原创 Java8源码-Set整体架构

前面一段时间,我们已经对List和Map的实现类进行了学习和总结。接下来,我们开始学习Set。相信学习了Map之后,学习Set会容易很多。本文主要介绍Set的整体结构。Set的整体结构Set接口继承了Collection接口。特点是不保存重复的元素。AbstractSet是一个抽象类,它继承于AbstractCollection,实现了Set。AbstractCollect...

2017-08-29 19:05:57 1811

原创 Java8源码-Map总结

前段时间已经学习了HashMap、Hashtable、LinkedHashMap、WeakHashMap、TreeMap的数据结构、实现原理、源码等等。下面LZ就Map的这几个实现类做一个简单的总结

2017-08-29 19:00:19 1426

原创 Java8源码-TreeMap

前几天学习了HashMap、Hashtable、LinkedHashMap、WeakHashMap,今天开始学习TreeMap。TreeMap是Map接口基于红黑树的实现,键值对是有序的。本文主要讲解关于红黑树实现的部分。部分顶部注释 A Red-Black tree based NavigableMap implementation. The map is sorted ac...

2017-08-28 21:20:34 2444

原创 Java8源码-WeakHashMap

前段时间学习了HashMap,HashTable,LinkedHashMap,今天学习WeakHashMap,参考的JDK版本为1.8。WeakHashMap和HashMap相似,也是哈希表的实现,以键值对的形式存储数据,key和value都可以为null。不同的是WeakHashMap的键为“弱键”。什么是“弱键”?弱键会对WeakHashMap产生什么影响?“弱键”是如何实现的?本文会通过...

2017-08-25 21:04:01 1713 2

原创 Java8源码-LinkedHashMap

前面已经学习了HashMap源码和Hashtable源码,今天开始学习LinkedHashMap。参考的JDK版本为1.8。LinkedHashMap继承了HashMap,是Map接口的哈希表和链接列表实现。哈希表的功能通过继承HashMap实现了。LinkedHashMap还维护着一个双重链接链表。此链表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。本文主要讲解双重链接链表的部分,...

2017-08-23 20:23:46 2221 2

翻译 如果程序员能早知道这些该有多好!

正如老牌乐队Faces的一首《Ooh La La》唱的那样,I wish that I knew what I know now when I was younger,如果我能早知道我现在知道的该有多好。年轻时,我只是单纯地喜欢写代码,对于自己的职业生涯和人际交往很少关心。如果我能早知道下面的8条建议,我就不会有现在的这么多麻烦。

2017-08-22 19:49:08 777 2

原创 Java8源码-Hashtable(2)

上一篇文章翻译了Hashtable源码顶部注释,本文将详细讲解Hashtable的各个方法的实现。Hashtable层次结构图先来看看Hashtable的定义: public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io...

2017-08-21 19:04:54 2487 1

原创 Java8源码-Hashtable(1)

前面已经学习了HashMap的源码,今天开始学习Hashtable。参考的JDK版本为1.8。(ps:以前都没注意到Hashtable中的t是小写的。。。)相信大家对Hashtable已经有所了解了,Hashtable和HashMap,从存储结构和实现来讲基本上都是相同的。它和HashMap的最大的不同是它是线程安全的,另外它不允许key和value为null。Hashtable是个过时的集合...

2017-08-20 14:14:46 2382 2

原创 Java8源码-HashMap

前面已经学习了List的实现类并做了总结,今天开始学习HashMap源码。参考的JDK版本为1.8。相信大家对HashMap的使用已经很熟悉了,它和List的最大的不同是它是以key-value的形式存储数据的。HashMap是如何保存和处理key-value键值对的?本文将分析HashMap的内部结构及实现原理,帮助大家更好的使用它。数据结构在分析HashMap源码之前,有必要了...

2017-08-19 20:38:27 5714 1

原创 Java8源码-Map整体架构

前面已经学习了List的实现类并做了总结,接下来学习Map的实现类。原本想学习Set,可仔细一想,Set的某些实现类如HashSet实现是基于HashMap的,TreeSet的实现也依赖于TreeMap。所以就决定先学习Map。本文主要介绍Map的整体结构,并简单介绍结构中的接口和抽象类。

2017-08-15 18:50:03 2976

原创 Java8源码-List总结

前面我们已经学习了ArrayList、Vector、LinkedList、Stack的源码,现在我们来对List做个简单的总结。List整体结构先来回顾一下List的整体结构List以线性方式存储元素,集合中可以存放重复对象,元素有序。 最常用实现类:ArrayList:随机访问元素快,增删元素慢。Vector:Vector与ArrayList相似。但Vector的...

2017-08-14 22:36:51 1695

原创 Java8源码-Stack

学完了ArrayList、Vector、LinkedList的源码后,今天来学习Stack源码。参考的JDK版本为1.8。Stack继承了Vector,学习了Vector再来学习Stack就变得很简单。Stack,栈,特点是先进后出(FILO, First In Last Out)。Stack是如何实现先进后出的?本文将详细讲解这个问题。顶部注释 The Stack class...

2017-08-14 20:53:56 2578

原创 LinkedList与迭代器模式

本文主要讲解迭代器模式在LinkedList源码中的使用。参考的JDK版本为1.8。迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象中的各个元素,而不用暴露这个对象的内部表示。在Java中,LinkedList的迭代器有三种:Iterator、ListIterator、DescendingIterator。其中DescendingIterator与Iterator只能...

2017-08-14 18:39:37 1570

原创 Java8源码-LinkedList

前几天学习了ArrayList源码和Vector源码和迭代器模式在它们源码中的使用,今天开始学习LinkedList源码。参考的JDK版本为1.8。LinkedList和ArrayList与Vector同样实现了List接口,但它执行某些操作如插入和删除元素操作比ArrayList与Vector更高效,而随机访问操作效率低。除此之外,LinkedList还添加了可以使其用作栈、队列或双端队列的...

2017-08-12 20:21:40 3848 1

原创 Iterator与Enumeration

Iterator已经实现了对容器的遍历了,Enumeration的存在有什么意义呢?Iterator和Enumeration有什么相同点和不同点?Enumeration提供了哪些方法?如何使用?在Java容器中是如何实现的?本文将一一回答这些问题。

2017-08-11 20:15:34 2048

原创 Java8源码-详解fail-fast

细心地朋友看Java容器源码时一定会发现在list()和listIterator()的注释中都有一句话: The iterators returned by this class’s iterator and listIterator methods are fail-fast.我看ArrayList源码没认真想fail-fast是什么意思,看Vector源码时又看到了这个词,而且...

2017-08-11 13:11:27 4617

原创 Vector与迭代器模式

本文主要讲解迭代器模式在Vector源码中的使用。参考的JDK版本为1.8。迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象中的各个元素,而不用暴露这个对象的内部表示。在Java中,Vector的迭代器有两种:Iterator和ListIterator。值得一提的是,elements()方法也能实现类似迭代器的效果。为什么已经有了迭代器,还特意在Vector中新增了e...

2017-08-10 19:22:38 2482 1

原创 Java8源码-Vector

前几天学习了ArrayList源码和迭代器模式在ArrayList源码中的使用,今天开始学习Vector源码。参考的JDK版本为1.8。相信大家对Vector的使用已经很熟悉了,它和ArrayList的最大的不同是它是线程安全的,这点在Vector源码中也有说明。Vector源码中注释有这么一句“Vector is synchronized. If a thread-safe impleme...

2017-08-09 21:17:06 8465 1

原创 ArrayList与迭代器模式

本文主要讲解迭代器模式在ArrayList源码中的使用。迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象中的各个元素,而不用暴露这个对象的内部表示。在Java中,ArrayList的迭代器有两种:Iterator和ListIterator。Iterator迭代器是一个用来遍历并选择序列中的对象。Java的Iterator的只能单向移动。例子在写...

2017-08-09 08:26:32 5740

原创 Java8源码-ArrayList

今天开始学习ArrayList源码。参考的JDK版本为1.8。相信大家对ArrayList的使用已经很熟悉了,但你真的了解ArrayList吗?ArrayList源码中注释的第一行是“Resizable-array implementation of the List interface”,意为“List接口的可变长数组实现”。ArrayList是如何实现可变长的?ArrayList有哪些私有...

2017-08-06 21:37:03 13305 14

原创 (一)Spring IoC源码-1.容器的初始化-02初始化过程概览

接下来分析BeanFactory bf = new XmlBeanFactory(new ClassPathResource("MyBean.xml")); 这行代码的实现细节。通过XmlBeanFactory初始化时序图来看下上面代码具体是如何执行的。首先调用ClassPathResource的构造函数来创建一个Resource的对象,然后以Resource的对象作为参数,调用Xm...

2017-08-05 21:36:58 2269 1

原创 (一)Spring IoC源码-1.容器的初始化-01容器概述

学习Spring源码,我们应该从哪里学习呢?提到Spring,你第一时间想到的是什么?无论是在面试中,还是在具体的项目中,IoC和AOP都是避不开的。而IoC更为重要,所以我决定从IoC开始学习。IoC又如何开始学习呢?深入理解DIP、IoC、DI以及IoC容器中说得很好: 控制反转(IoC):一种反转流、依赖和接口的方式(DIP的具体实现方式)。 依赖注入(DI):Io...

2017-08-05 21:16:02 2902

原创 eclipse-查看继承层次图/继承实现层次图

阅读代码时,如果想要看某个类继承了哪些类、实现了哪些接口、哪些类继承了这个类,恰巧这个类的继承实现结构又比较复杂,那么如果对开发工具不是很熟练,这个需求是比较难以实现的。eclipse中的type hierarchy可以满足这个需求。本文以Spring源码中的ClassPathResource.java为例。

2017-08-05 16:46:15 21859 6

原创 Java容器-整体结构

为什么需要Java容器通常,程序总是在运行时才能确定要创建的对象的数量,甚至是对象的类型。为了解决这个问题,需要在任意时刻任意位置创建任意数量的对象。大多数语言都提供某种方法来解决这个问题,Java使用容器来解决这个问题。容器也称集合类,基本的类型是List、Set、Queue、Map,但由于Java类库中使用了Collection关键字来代表某一接口,所以一般用容器来称呼这些集合...

2017-08-03 14:06:20 4070 2

原创 Spring源码-整体架构

Spring是一个分层框架,它包含大约20个模块。Data Access/Integration层含有JDBC、JDBC、JDBC、JMS、Transactions模块。Web层包含了Websocket、Servlet、Web、Porlet模块。Spring AOP模块将面向切面编程功能集成到Spring框架中。Aspects模块为Spring框架提供了对AspectJ的支持。AspectJ是一个流行的AOP框架。

2017-08-02 11:22:35 4879 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除