目录
泛型概述及使用
泛型:
把明确数据类型的工作提前到编译时期,在创建 对象的时候明确。这种有点像把类型当作参数进行传递,所以泛型还有另外一种叫法:参数化类型
格式:
注意:这里的数据类型只能是引用数据类型
好处:
1、将运行时期的问题提前到编译时期
2、避免了强制类型转化
3、优化了代码程序,消除不必要的黄色警告线
有些类、接口、方法、抽象类后面都跟有存在,就说明要使用泛型,一般来说泛型大多使用集合中
泛型的高级用法:(通配符)
泛型通配符
任意类型,如果没有明确,那么就是Object以及任意的Java类了
向下限定,E及其子类
向上限定,E及其父类
泛型方法:将泛型定义在方法上
格式:public 返回类型 方法名(泛型类型 .)
把泛型定义在接口上
格式:public interface 接口名
JDK1.5之后出现的特性:泛型、增强for循环、包装类(自动装箱、自动拆箱)
增强for概述
简化数组和Collection集合的遍历
格式:
for(元素数据类型 变量:数组或者Collection集合){
使用变量即可,该变量就是元素
}
好处:简化遍历
注意事项:增强for的目标要判断是否为null
静态导入概述
格式:import static 包名...类名.方法名;
可以直接导入到方法的级别
注意事项
方法必须是静态的
如果有多个同名的静态方法,容易不知道使用谁?这个时候要使用,必须加前缀
可变参数概述
定义方法的时候不知道该定义多少给参数
格式
修饰符 返回值类型 方法名 (数据类型... 变量名){}
注意:
这里的变量其实是一个数组
如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个
Arrays工具类中的一个方法
public staitc List asList(T... a) 将数组转换为集合
集合转换为数组
Object[] objects = integers.toArray();
数组转换为集合
ListobjectList = Arrays.asList(objects);
Set集合
元素唯一,且元素无序(储存顺序和取出顺序不一样)
HashSet:
此类实现Set接口,由哈希表(实际为HashMap实例)支持。线程不安全,效率高
通过观察源码发现,要想知道是否将元素插入到集合,先看元素的HashCode()值是否相同
如果相同,继续判断equals()方法
返回true,说明元素的内容一样,重复了,就不添加
返回false,说明元素的内容不重复,只是哈希值一样,就会添加集合中
如果连哈希值都不一样,就直接添加到集合中
LinkedHashSet:底层是哈希表和链表组成
哈希表保证元素的唯一性
链表保证的元素的顺序、有序(存储和取出顺序的一致)
Collection
List 元素有序(存储顺序和取出顺序一样),元素可以重复
ArrayList
vector
LinkedList
Set 元素唯一,且元素无序(存储顺序和取出顺序不一样)
HashSet
TreeSet