(1)使用泛型时,把泛型参数替换为需要的class类型。
(2)可以省略编译器能自动推断出的类型,例如:List
(3)不指定泛型参数类型时,编译器会给出警告,且只能将视为Object类型;
(4)可以再接口中定义泛型类型,实现此接口的类必须实现正确地泛型类型。
(1)泛型是一种类似“模板代码”的技术,不同语言的泛型实现方式不一定相同。java语言的泛型实现方法是擦拭法(Type Erasure)。擦拭法是指,虚拟机对泛型一无所知,所有的工作都是编译器做的。编译器把类型视为Object,编译器根据实现安全地强制转型。
(2)java泛型的局限:
局限一:不能是基本类型,例如int,因为实际类型时Object,Object类型无法持有基本类型。
局限二:无法去的带泛型的Class。也就是说,所有泛型实例,无论T的类型是什么,getClass()返回同一个Class,因为编译后它们全部都是Pair
(1)一个类可以继承自一个泛型类。
(2)Pair
(3)Pair super Integer>表示,方法参数接受所有泛型Integer或者Integer父类的Pair类型。这里表示允许调用set(? super integer)方法传入Integer的引用,不允许调用get()方法获得Integer的引用。
换句话说,使用 super Integer>通配符作为方法参数,表示方法内部代码对于参数只能写,不能读。
何时使用extends,何时使用super。为了方便记忆,我们可以使用PECS原则:Prodcuer Extends Consumer Super。即:如果需要返回T,它是生产者(Producer),要使用extends通配符;如果需要写入T,它是消费者(Consumer),要使用super通配符。
因为>通配符既没有extends,也没有super,因此:
(1)不允许调用set(T)方法并传入引用(null除外);
(2)不允许调用T get()方法并获取T引用(只能获取Object引用)。
换句话说,既不能读,也不能写,那只能做一些null判断。无限定通配符>很少使用,可以用替换,同时它是所有的超类。
配置文件的特点是,它的Key-Value一般都是String-String类型的,因此我们完全可以用Map
(1)读取配置文件,java默认配置文件以.properties为扩展名,每行以key=value表示,以#开头的是注释。用Properties读取配置文件,一共有三步:
1.创建Properties实例;
2.调用load()方法读取文件。
3.调用getProperty()获取配置。
(1)添加、删除、获取队列元素总是有两个方法,这是因为在添加或获取元素失败时,这两个方法的行为是不同的。

(2)我们可以发现,LinkedList既实现了List接口,又实现了Queue接口,但是在使用的时候,如果我们把它当做List,就获取List的引用,如果我们把它当做Queue,就获取Queue的引用。始终按照面向抽象编程的原则编写代码,可以大大提高代码的质量。
(1)PriorityQueue实现了一个优先队列:从队首获取元素时,总是获取优先级最高的元素。
(2)PriorityQueue默认按元素比较的顺序排序(必须实现Comparable接口),也可以通过Comparator自定义排序算法(元素就不必实现Comparable接口)。
(1)允许队列两头都进,两头都出,这种队列叫双端队列(Double Ended Queue),学名Deque。
