java学习中对泛型、Map、Collectiongs的一些理解

来源:互联网 发布:手机淘宝如何申请售后 编辑:程序博客网 时间:2024/05/22 11:48

泛型:

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

Map 集合:<键值对>
就像是一本书的目录和内容,通常是通过目录去找内容。
Map 无序的:
1、增 put(key, value) putAll(Map<? extends K,? extends V> m)
2、删 clear remove(Object key)
3、改 put(K key, V value)
4、查 keySet entrySet get size
HashMap与TreeMap
1、HashTable 同步的,Hash表的数据结构形式,速度慢
2、HashMap 不同步的,Hash表的数据结构形式,速度快
3、TreeMap 不同步的,Tree的数据结构形式,速度慢
获取键的形式,遍历:
1、keySet
2、entrySet
HashMAP 和 HashSet 区分与联系:
1、都是通过哈希表做为数据结构存储数据。
2、集合内部的数据都不重复。
3、HashSet 其实就是一种HashMap,只不过不存在相关的key,也就是取值的时候只能用迭代。
4、HashMap 没有迭代。需要转换成Set类型。

Collections

包装器与众多集合类一样实现了Collection接口。
包装器里的方法都是由静态方法组成,可以直接通过类调用

包装器里的方法:fill、reverse、max、min、replaceAll、shuffle、sort\
fill: 使用指定元素替换指定列表中的所有元素。
reverse: 反转指定列表中元素的顺序。
max: 取列表中最大的元素,按自然排序。
min:取集合中最小的元素,按自然排序。
replaceAll: 使用另一个值替换列表中出现的所有某一指定值。
shuffle:打乱列表
sort: 自然排序,可重写比较器

高级for循环:在1.5之后有foreach
for( xx : yy )
高级for局限性:必须要有遍历的目标
可变参数 JDK 1.5 特性
其实一种数组参数的简写方式,代替实例化的过程,也称之为隐私封装数组.。

可变参数原则:
  1、如果需要多个参数传入,请把其他的参数放在可变参数之前。
2、可变参数只有... ,比如 int... 表示传入的int的数组。
3、一个函数只能拥有一个可变参数。

0 0
原创粉丝点击