使用List

在集合类中,List是最基础的一种集合:它是一种有序列表。 List的行为和数组几乎完全相同:List内部按照放入元素的先后顺序存放,每个元素都可以通过索引确定自己的位置,List的索引和数组一样,从0开始。 数组和List类似,也是有序结构,如果我们使用数组,在添加和删除元素的时候,会非常不方便。例如,从一个已有的数组{'A', 'B', 'C', 'D', 'E'}中删除索引为2的元素: ┌─
使用List

java集合简介

什么是集合(Collection)?集合就是“由若干个确定的元素所构成的整体”。例如,5只小兔构成的集合: ┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┐ │ (\_(\ (\_/) (\_/) (\_/) (\(\ │ ( -.-) (•.•) (>.<) (^.^) (='.') │ C(")_(") (")_(") ("
java集合简介

泛型和反射

Java的部分反射API也是泛型。例如:Class<T>就是泛型: // compile warning: Class clazz = String.class; String str = (String) clazz.newInstance(); // no warning: Class<String> clazz = String.class; String str =
泛型和反射

super通配符

我们前面已经讲到了泛型的继承关系:Pair<Integer>不是Pair<Number>的子类。 考察下面的set方法: void set(Pair<Integer> p, Integer first, Integer last) { p.setFirst(first); p.setLast(last); } 传入Pair<Integer>是允许的,
super通配符

extends通配符

我们前面已经讲到了泛型的继承关系:Pair<Integer>不是Pair<Number>的子类。 假设我们定义了Pair<T>: public class Pair<T> { ... } 然后,我们又针对Pair<Number>类型写了一个静态方法,它接收的参数类型是Pair<Number>: public class Pai
extends通配符

擦拭法

泛型是一种类似”模板代码“的技术,不同语言的泛型实现方式不一定相同。 Java语言的泛型实现方式是擦拭法(Type Erasure)。 所谓擦拭法是指,虚拟机对泛型其实一无所知,所有的工作都是编译器做的。 例如,我们编写了一个泛型类Pair<T>,这是编译器看到的代码: public class Pair<T> { private T first; private T la
擦拭法

编写泛型

编写泛型类比普通类要复杂。通常来说,泛型类一般用在集合类中,例如ArrayList<T>,我们很少需要编写泛型类。 如果我们确实需要编写一个泛型类,那么,应该如何编写它? 可以按照以下步骤来编写一个泛型类。 首先,按照某种类型,例如:String,来编写类: public class Pair { private String first; private String last; p
编写泛型

使用泛型

使用ArrayList时,如果不定义泛型类型时,泛型类型实际上就是Object: // 编译器警告: List list = new ArrayList(); list.add("Hello"); list.add("World"); String first = (String) list.get(0); String second = (String) list.get(1); 此时,只能把&
使用泛型