● JAVA SE
文章平均质量分 53
你是我世界的光
不念过往,不畏将来。
展开
-
ArrayList部分源码分析(基于1.8)
今天分析第一个集合类:ArrayList首先,说一下我读这部分源码的感受。ArrayList类底层实现实际上是数组,因此很多操作会调用很多本地(Native)方法来实现或者部分实现。用java实现的很多方法中,只是用java代码进行了一些必要的逻辑判断和变量值的改变。在AbstractList中加入的modCount变量是为了配合迭代器的使用。下面是部分源码分析:package java.u原创 2016-06-20 18:24:01 · 1939 阅读 · 1 评论 -
LinkedList源码分析
LinkedList类继承了AbstractSequentialList< E >抽象类并实现了List接口。在AbstractSequentialList类中,其实主要是实现一些关于索引的方法。因此LinkedList中也支持“随机访问”。但这种随机是伪随机的,稍后我们可以看到。这里我结合今天下午我参加的一场面试来简要说一下关于LinkedList和ArrayList的一些问题。ArrayLis原创 2016-06-22 00:04:49 · 2141 阅读 · 0 评论 -
Map接口源码分析
本来打算写HashSet的源码分析的。但是发现HashSet的实现依赖于HashMap,因此这里转向Map分支的源码分析,到最后再将Set分支的补完整。Map的结构图 - SortedMap接口是有序的键值对的集合,排序依据是比较器的比较逻辑。 - AbstractMap下有三个实现类,其中TreeMap实现了NavigableMap接口,所以TreeMap中也是有序的键值对集合。 - Has原创 2016-06-22 23:54:28 · 3985 阅读 · 0 评论 -
TreeMap分析
1.8与1.7相比,TreeMap的实现并没有发生改变。或者说,从1.2版本开始,TreeMap就没有发生过变化。由于TreeMap的实现没有变化,推荐阅读倪升武博客。下面我只是来总结一下倪升武的博客中没有提及的或者是我认为比较重要的几点。一.TreeMap的几个重要特点TreeMap内部是使用红黑树结构存储的。TreeMap中允许null值作为value,但是不允许null成为key。下面是原创 2016-08-14 15:52:42 · 1764 阅读 · 1 评论 -
HashMap源码分析(基于1.8)
HashMap1.7和1.8变动比较多。 关于HashMap 1.7的版本,倪升武的博客总结的很好。这里我主要来介绍一下1.8中的HashMap。由于HashMap源码太长,我只挑选了部分进行分析,如果有没有分析到的重点难点或者大家有疑问的地方,希望大家私信给我~。HashMap的存储思想演化在1.7中,HashMap是以“数组+链表”的基本结构来存储key和value构成的Entry单元的。其中原创 2016-06-23 23:09:51 · 3154 阅读 · 0 评论 -
JDK与JRE结构图解
下面是我就自己的一些理解和网上看到的资料自己画的一个关于JDK和JRE的有助于理解的示意图:这里说明一下2个JRE的区别。首先与JDK并行的JRE,是非开发人员使用的JRE,我们都知道JRE是java程序的运行环境,假如我们不是开发者,我们是用户,我们只是使用这些程序,那么我们关注的不是程序性能,我们更关注的可能是程序启动时间,因此这个JRE启动更快,这个JRE我们也称其为client端的JRE。然原创 2016-09-18 21:57:51 · 4609 阅读 · 0 评论 -
JAVA --泛型学习补充(一)
[code=java]package set;import java.util.Arrays;import java.util.Iterator;import java.util.TreeSet;import java.util.SortedSet;public class SortedSetUse {public static void main(Stri原创 2015-11-20 20:13:58 · 422 阅读 · 0 评论 -
JAVA ---------学习泛型集合。
第一篇博客。1.关于集合的迭代器。 创建集合的迭代器之后,如果集合被他的某个方法更改了,则这个迭代器立即变为无效。此后任何方法对这个集合的操作都会抛出ConcurrentModificationException异常。因此,迭代器被称为是“快速失效的。”-----摘自 《JAVA 程序员教程(第二版)》2.双向迭代器 以list迭代器为例,List原创 2015-11-20 14:49:02 · 472 阅读 · 0 评论 -
面向对象
面向对象的主要特征主要包括抽象、集成、封装、多态。组合和继承是代码重用的2种方式。 组合:在新类中创建原有类的对象,以重复利用已有类的功能。 继承:设计人员根据已有的类来定义一个类的实现。 组合是has a的关系,而继承是is a的关系。多态主要有2种表现方式(实现机制):方法的重写(覆盖)和方法的重载。 (1)方法的重载:原创 2016-03-27 14:14:48 · 346 阅读 · 0 评论 -
Collection架构源码分析(基于1.8)
Collection接口有三个子接口,我们主要来分析一下其中的两种:List和SetList:有序集合,其中元素可以重复。Set:无序集合,元素不可以重复。原创 2016-06-18 16:01:29 · 1961 阅读 · 0 评论 -
JAVA常用集合框架源码解析(基于1.8)开题篇
倪升武的博客中有一个小专题,读完之后,发现博主的分析基本是基于JAVA1.7的,这里我基于JAVA1.8给出一些新的解读。因为在彻底浅读完JAVA1.8集合部分之前,我无法了解JAVA1.7与1.8之间关于集合框架的改动到底会有多少,因此可能产生某些个人理解上的不当,希望大家可以予以指正。集合分类1.Collection框架首先是一个Collection框架图: 标注:从网上看过好多图片,分类是比原创 2016-06-18 11:04:17 · 2689 阅读 · 0 评论 -
JDBC驱动加载程序
如下:package com.demo;import java.sql.*;public class Conn{ static //优先级要高于其它方法,首先被执行 { try { Class.forName("com.mysql.jdbc.Driver").newInstance(); }原创 2016-07-23 11:40:34 · 339 阅读 · 0 评论 -
java中类/对象的初始化顺序以及静态代码块的使用
一、对象的初始化顺序:(java类加载器加载类的顺序:)(1)加载父类(以下序号相同,表明初始化是按代码从上到下的顺序来的) 1.为父类的静态属性分配空间并赋于初值 1.执行父类静态初始化块;(2)加载子类 2.为子类的静态属性分配空间并赋于初值 2.执行子类的静态的内容;(3)加载父类构造器 3.初始化父类的非静态属性并赋转载 2016-03-06 23:52:07 · 660 阅读 · 0 评论 -
JDK与JRE的一些问题
关于jdk和jre 本文转载自:http://ihyperwin.iteye.com/blog/1513754大家肯定在安装JDK的时候会有选择是否安装单独的jre,一般都会一起安装,我也建议大家这样做。因为这样更能帮助大家弄清楚它们的区别: Jre 是java runtime environment, 是java程序的运行环境。既然是运行,当然要包含jvm原创 2016-04-09 10:48:58 · 522 阅读 · 0 评论 -
集合类说明及区别
集合类说明及区别--Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMap转载自:http://blog.csdn.net/softwave/article/details/4166598Collection接转载 2016-04-09 22:18:52 · 453 阅读 · 0 评论 -
HashSet源码分析(基于1.8)
其实对于HashSet,他的源码很简单,只是里面有些问题我感觉有必要拿出来跟大家共同探讨一下。HashSet底层是HashMap实现我们知道,HashMap中key值是不能“重复”的(这个是否重复是通过hashcode和equals比较出来的,这是一个值得探讨的问题),HashSet正是借鉴了HashMap的key的这样一个特性,以此产生了这样一个不能包含重复数据的集合。源码分析由于源码不是很多,所原创 2016-06-24 16:40:51 · 2778 阅读 · 1 评论 -
HashSet源码解析
Set接口在讲HashSet之前先说一下Set接口。见源码:package java.util;//这里我截取部分源码中的注释/** * A collection that contains no duplicate elements. More formally, sets * contain no pair of elements e1 and e2 such t原创 2016-07-22 13:27:50 · 380 阅读 · 0 评论 -
Object类源码解析
本文的分析基于JDK 1.8 JAVA中所有的类都继承自Object类。Object类的源码解析1.void registerNatives() private static native void registerNatives(); static { registerNatives(); }该方法只是对几个本地方法进行注册(即初始化java方法映射到C的方原创 2016-06-14 20:01:27 · 3731 阅读 · 3 评论 -
“”和null的区别
这个问题之前已经搞定了,奈何最近又有一点迷糊,特此总结一下。这里有几种声明方式: ① String a = null; ② String b = ""; ③ String e = ""; ④ String c = new String(""); ⑤ String d = new String(); ⑥ St原创 2016-04-19 20:58:11 · 571 阅读 · 0 评论 -
解释器与JIT编译器
本文转自http://book.51cto.com/art/201504/472756.htm早在Java1.0版本的时候,Sun公司发布了一款名为Sun Classic VM的Java虚拟机,它同时也是世界上第一款商用Java虚拟机,在当时这款虚拟机内部只提供解释器,用今天的眼光来看待必然是效率低下的,因为如果Java虚拟机只能够在运行时对代码采用逐行解释执行,程序的运行性能可想而知转载 2016-04-11 08:47:25 · 2269 阅读 · 0 评论 -
抽象类与接口
先说一下接口中的成员变量必须是public static final的: 首先public比较容易理解,因为实现接口的实现类需要得到这个成员变量。其次对于final,因为接口的设计理念是基于一种标准化的思想,即接口是关乎一种公共的功能的抽象,在接口中,接口的成员变量和方法处于相同的地位,成员变量也表示该接口的一种属性,是一种公共的标准的属性,如果不置为final,那么每个继承他的接口都原创 2016-03-27 23:31:19 · 570 阅读 · 0 评论