HashMap和Hashtable的区别

相同点HashMap和Hashtable都是存储“键值对(key-value)”的散列表。存储的思想都是:通过table数组存储,数组的每一个元素都是一个Entry;而一个Entry就是一个单向链表,Entry链表中的每一个节点保存了key-value键值对数据。添加key-value键值对:首先,根据key值计算出哈希值,再计算出数组索引。然后,根据数组索引找到Entry(单向链表),再 …… 阅读全文

Iterator迭代器

Iterator是一个迭代器接口,它专门用于迭代各种Collection集合,包括Set集合和List集合。如果查阅JDK的API文档将发现,Iterator迭代器接口只有一个Scanner实现类。显然Scanner并不能用于迭代Set、List集合,那迭代List、Set集合的Iterator迭代器实现类在哪里下面测试使用Iterator迭代各种集合所返回的Iterator对象。en …… 阅读全文

关于Java中try finally return语句的执行顺序分析

问题分析finally语句块一定会执行吗?可能很多人第一反应是肯定要执行的,但仔细一想,如果一定会执行的话 也就不会这么SB的问了。Demo1public class Test { public static void main(String[] args) { System.out.println("return value of test(): " + …… 阅读全文

Java中substring内存泄露问题

在Java中,String是最常用的数据类型,String有一个substring方法用来截取字符串,或许我们没注意到该方法可能会引起内存泄露问题(出现于Java6中)。方法介绍:在Java中提供了两个截取子字符串的方法:substring(int beginIndex)substring(int beginIndex, int endIndex)问题重现:publi …… 阅读全文

WeakHashMap实现原理及源码分析

和HashMap一样,WeakHashMap 也是一个散列表,它存储的内容也是键值对(key-value)映射,而且键和值都可以是null。不过WeakHashMap的键是“弱键”。在 WeakHashMap 中,当某个键不再正常使用时,会被从WeakHashMap中被自动移除。这个“弱键”的原理大致上就是,通过WeakReference和ReferenceQueue实现的。WeakHashM …… 阅读全文

Java静态代码块、构造代码块、构造函数

所谓的代码块是指使用“{}”括起来的一段代码,根据位置不同,代码块可以分为构造代码块、构造函数、静态代码块。静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用 {} 定义,每一次创建对象时执行。构造函数:创建对象时执行执行顺序优先级:静态代码块 > 构造代码块 > 构造函数。静态代码块static { System.out.p …… 阅读全文

Java实例变量和类变量

Java程序的变量大体可分为成员变量和局部变量。其中局部变量可分为如下3类。形参:在方法签名中定义的局部变量,由方法调用者负责为其赋值,随方法的结束而消亡。方法内的局部变量:在方法内定义的局部变量,必须在方法内对其进行显示初始化。这种类型的局部变量从初始化完成后开始生效,随方法的结束而消亡。代码块的局部变量:在代码块内定义的局部变量,必须在代码块内对其进行显式初始化,这种类型的局部变量从初始化 …… 阅读全文

Java之final修饰符

final修饰符是Java语言中比较常见的一个修饰符,我们经常用的String类就是一个final类。 final的用法主要有以下几种:final可以修饰变量,被final修饰的变量被赋初始值之后,不能对它重新赋值。final可以修饰方法,被final修饰的方法不能被重写。final可以修饰类,被final修饰的类不能派生子类。final修饰的变量被final修饰的实例变量必须显式指定初始 …… 阅读全文