泛型:
1、泛型定义,一种安全机制。表明参数或者接口或者类的数据类型,
般是 < > 表示
泛型,是在1.5之后才产生的,
一般JDK“进化” 会更安全,更高效,更完整。
在1.5之前,没有泛型都是用利用多态的思想
强制转化成某个类型再得到想要的值,
使用泛型过后, 可以在编译的环节直接知道数据的问题所在:
ArrayList<Person> list = new ArrayList<Person>();
泛型在什么时候使用?
当不确定某个参数的类型的时候可用泛型。
2、泛型的类
泛型类在多个方法前面间实施类型约束。
泛型一旦作用于类,那么该类的所有函数都可以使用该泛型类
实例化该类的时候需要加入泛型确保安全。
3、泛型的函数
1、通常情况下参数内部不知道类型的时候使用泛型。
public <QQ> void run(QQ q)
4、 静态泛型函数:
1、静态函数不可以访问类上定义的泛型。
2、如果静态方法操作的应用数据类型不确定,
那么在函数上确定好泛型
5、 泛型接口:
* interface Run<TT>{
public void run(TT a);
public void runrun(TT b);
}
需要注意的是:一旦使用名字,那么在实现的时候
需要确定是何种类型。
来自官方普通的四种泛型
<K> 键 <V> 值 <E> 异常类 <T> 普通泛型
特殊情况:
1、泛型的参数如果不考虑继承的话,
会报错的,除非用?
泛型通配符有三种:
1、无限定通配符 , <?>
2、上边界限定通配符 ,<? extends Number>
ArrayList<? extends 类型1> x = new ArrayList<类型2>();
类型1指定了一个数据类型,
那么类型2只能是类型1或者类型1的子类
3、下边界限定通配符 ,<? super Number>
ArrayList<? super 类型1> x = new ArrayList<类型2>();
类型1指定了一个数据类型,
那么类型2就只能是类型1或者类型1的父类
限定通配符总是包括自己!
Map
就像是一本书的目录和内容,通常是通过目录去找内容。
1、增 put(key, value) putAll(Map<? extends K,? extends V> m)
2、删 clear remove(Object key)
4、查 keySet entrySet get size
HashMap与TreeMap
1、HashTable 同步的,Hash表的数据结构形式,速度慢
2、HashMap 不同步的,Hash表的数据结构形式,速度快
3、TreeMap 不同步的,Tree的数据结构形式,速度慢
3、HashSet 其实就是一种HashMap,只不过不存在相关的key,也就是取值的时候只能用迭代。
4、HashMap 没有迭代。需要转换成Set类型。
包装器与众多集合类一样实现了Collection接口。
包装器里的方法都是由静态方法组成,可以直接通过类调用
包装器里的方法:
fill、reverse、max、min、replaceAll、shuffle、sort\
fill: 使用指定元素替换指定列表中的所有元素。
replaceAll: 使用另一个值替换列表中出现的所有某一指定值。
其实一种数组参数的简写方式,
代替实例化的过程,
也称之为隐私封装数组.。
1、如果需要多个参数传入,请把其他的参数放在可变参数之前。
2、可变参数只有... ,比如 int... 表示传入的int的数组。