JDK 文档中对Vector的描述是这样的:Vector 类实现了一个可增长的对象数组。像数组一样,可以通过整型索引来获取内容,但是 Vector 的大小可以按照实际元素数量的需求进行增长或收缩。Vector 和 ArrayList 非常接近,区别在于 ArrayList 的实现是非同步的,在多线程 ...
阅读全文 »

HashMap 是对 Map 接口的一种基于哈希表的实现。所谓 Map,就是映射,存储一系列 Key-Value 对,一个键对应一个值,通过键来查找对应的值。HashMap 是一种高效的实现,在通常情况可以得到常数级别的查找和插入性能。 12public class HashMap<K,V&g ...
阅读全文 »

概览ArrayList是最常使用的集合类之一了。在JDK文档中对ArrayList的描述是:ArrayList是对list接口的一种基于可变数组的实现。ArrayList类的声明如下: 12public class ArrayList<E> extends AbstractList< ...
阅读全文 »

为什么使用内部类?在 『Effective Java』中提到了一条建议,尽量使类和成员的可访问性最小化。这个原则其实是面向对象的程序设计的基本原则,即封装的概念。对于成员变量,我们知道,可以有较好的访问权限控制;但是对于类来说,通常我们都使用 public 或 包级私有(默认,不加修饰符),这样的话 ...
阅读全文 »

前言Apache HBase 是目前大数据系统中应用最为广泛的分布式数据库之一。我们经常面临向 HBase 中导入大量数据的情景,通常会选择使用标准的客户端 API 对 HBase 进行直接的操作,或者在MapReduce作业中使用 TableOutputFormat 作为输出。实际上,借助 HBa ...
阅读全文 »

概览注解(Annotation),是从 Java 5 开始引入的一项新特性。所谓注解,就是一种元数据,可以藉此为程序添加非功能性的数据。注解对它们所标注代码的执行不会造成影响。 尽管注解对代码的执行不会影响代码的执行,但注解信息却可以嵌入编译生成的类文件,甚至在运行时得以保留。在 Java 源 ...
阅读全文 »

代理, 是一种十分常见的设计模式,即为其他对象提供一个代理从而控制对这个对象的访问。使用代理模式的场景有很多,比如控制对远程对象的访问;对象实例化代价很高,出于性能考虑,需要延迟进行加载;出于安全性的角度,需要屏蔽特定对象的访问等等。 代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息 ...
阅读全文 »

反射能够让运行在JVM中的程序检测和修改运行时的行为。在Java中使用反射API可以在运行时获取对象的内部结构信息,就仿佛相应的Java类的内部结构(字段、方法、构造方法等)在镜子前清晰地“反射”出来一样。 我们知道,JVM的类加载机制允许从多种源动态地加载Java类,但是动态类加载有一个重要的缺点 ...
阅读全文 »

Java平台在JDK 5中引入了一个重要的特性 —— 泛型(generics),允许在定义类和接口的时候使用 句法表示的类型参数(type parameter),在使用相应的类和接口的时候用具体的类来替换类型参数,因此泛型又被称作参数化类型(parameterized type)。泛型的最广泛应用 ...
阅读全文 »

在 Java 5 中提供了变长参数,允许在调用方法时传入不定长度的参数。变长参数是Java的一个语法糖,本质上还是基于数组的实现。 12void foo(String... args);void foo(String[] args); 12//方法签名([Ljava/lang/String;)V / ...
阅读全文 »