Java Enum 分析
枚举的用途
枚举是一中特殊的数据类型, 枚举中的变量是我们预先设定的一组值, 并且该组值是固定,无法增删改的.
我们可以用来记录一些特殊的值, 比如星期几, 东西南北方向, 性别等,
用Enum可以实现单例模式, 用Enum实现单例模式是一种很优雅的方式, 它的优点:
保证是线程安全的
序列化不会破坏用枚举实现的单例
枚举的示例
示例1:
package com.myEnum;
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY;
}
示例2:
publ...
String 源码分析
须知
1.String不属于基本数据类型.
2.String是Immutable(不可变的).String的大部分方法都会返回一个新的String.
3.Java对于String提供了编译期的运算符重载, String对于(+)的实现通过StringBuilder的append()方法.
4.Java默认提供了对于所有类转化为String类的方法, 即都继承了Object的toString()方法.
接口
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
Serializable序列化接口
Comparab...
Java 基础博文Collections
面向对象
什么是面向对象
面向对象、面向过程
面向对象的三大基本特征
五大基本原则
平台无关性
Java如何实现的平台无关性的
JVM还支持哪些语言(Kotlin、Groovy、JRuby、Jython、Scala)
值传递
值传递、引用传递
为什么说Java中只有值传递
封装、继承、多态
什么是多态
方法重写与重载
Java的继承与实现
Java的继承与组合
构造函数与默认构造函数
类变量、成员变量和局部变量
成员变量和方法作用域
Java基础知识
基本数据类型
7种基本数据类型:整型、浮点型、布尔型、字符型
整型中byte、short、int、long的取值范围
什么是浮点型?
什么是单精度和双精度?
为什么不能用浮点型表示金额?
自动拆装箱
什...
HashMap源码分析
通过研究高水平的代码, 不断思考 我们才能写出更好的代码, HashMap的高性能表现使得不少人去研究它是如何实现, 以及HashSet也只是保证了一个HashMap, 该文可能会由主体到细节, 不断更新.
如果你对HashMap中的hash算法不太了解, 那么请先去了解一下, 在阅读本文.
hashmap的hash算法
本文的解析大部分以注释的方式嵌入了代码中.
class Node (构成hashmap的节点)
static class Node<K,V> implements Map.Entry<K,V> {
final int hash;
final K key;
V value;
...
Java 各种hash算法分析
Hash, 把任意长度的输入, 通过散列算法, 转化为一个定长的值.
散列算法的一个特性:根据同一散列算法算出来的值, 如果输入值是不同的, 那么输出值也不同, 但是根据同一函数算出来的散列值相同, 那么输入值不一定相同.(哈希冲突)
根据散列算法的特性, javadoc中说明了java hashcode的准则:
概括来说就是如果equals()方法返回true, 那么生成的hashcode一定相同, 如果equals()方法返回false, 那么生成的hashcode则可能相同也可能不同.(这也是为什么javadoc上要求, equals()方法和hashcode()方法尽量一起重写的原因)
看起来有点绕口, 再简略一下, hashcode相等是两个实例相等的前提条件.
在O...
43 post articles, 9 pages.