学习java第十五天

学习java第十五天

泛型:对类、接口后者方法的约束,用于方法参数、数据类型不确定时
泛型的时候:
好处:
1.避免强制转型 2.把错误由运行出错提前到编译出错
坏处:
只能够存一种数据类型
注 :如果使用迭代器来遍历集合,迭代器的泛型必须与集合的泛型是一样的
泛型中没有继承
泛型一般用以下字母表示:T、W、Q、K、V、E。

泛型类:描述这个类的时候不给其具体的类型

定义:
class 类名 <泛型类型1,泛型类型2,..>{
}
使用:
类名 <引用数据类型> 对象名 =new 类名 <引用数据类型>( );

在使用这个类时确定泛型。

实例化集合类泛型的语法
jdk1.7之后:

集合类 <引用数据类型> 对象名 = new 集合实现类 < >( );

jdk1.7之前:

集合类 <引用数据类型> 对象名 = new 集合实现类 <引用数据类型>( );

泛型方法定义:
非静态:

访问修饰符 <泛型> 返回值类型 方法名(泛型 参数1,...){
}

静态:
静态的方法不能使用类的 泛型

访问修饰符 static <泛型> 返回值类型 方法名(泛型 参数1,...){
}

.
接口泛型:

访问修饰符 interface  接口名 <泛型类型1,泛型类型2,...>{
}

.
泛型接口使用:
1、实现类不是泛型类,而是确定了接口泛型的类。(看List)

访问修饰符 class 实现类类名 implements 接口名 <具体类型>{
}

2、声明的类还是一个泛型类,泛型与接口泛型一致 (看Scanner)

访问修饰符 class 实现类类名 <泛型1> implements 接口名 <泛型1> {
}

通配符 ? :任意的泛型
特点:

  1. 不能在实例化的时候给?泛型
  2. 一般是作为参数的类型
    这种表示 是 E 泛型的子类或者是它本身:<? extends E>
    这种表示是 E 泛型的父类或者它本身:<?super E>

集合Set

  1. Collection 下的子接口
  2. 不能包含重复的元素
  3. 无序(不能使用普通的for循环)
    方法跟 Collection 一样

对set集合进行遍历 :
1.第一种使用没有泛型 转换成数组的方式

Object [] obj =set.toArray();
for (Object o :obj){
    System.out.println(o);
}

2.使用带泛型,转换成数组的方式

String [] s2 = set.toArray(new String[]{});
System.out.println(Arrays.toString(s2));

3.使用迭代器的方式

Iterator iter=set.iterator();
while (iter.hasNext()){
    System.out.println(iter.next());
}

4.使用增强for 循环的方式

for (Object o :set){
	System.out.println(o);
}

注:set集合因为没有索引,不能够使用普通for循环
HashSet类:是Set的实现类

  1. 哈希表结构进行存储 (查询速度快)
  2. 不能包含重复的元素,元素加进去是执行了两个方法用于判断是否重复:第一个是HashCode方法 第二个是equals()方法
  3. 无序,存储的数据和读出来的数据顺序不一样。

常规方法:public boolean add(E e):添加指定元素

LinkedHashSet类:是HashSet的子类,但是它有序
存的方式是采用的数据+ 双重链表式 第一种链表式用于来把相同hash值的元素进行串联
第二种链表式来记录每一值的顺序
也就是它是有序的:存与取都是一致的

总结:学习的这个泛型,我对知识点还是有点懵懵懂懂的,一开始看泛型,觉得类似于方法的重载,只知道这个泛型是不确定的类型,调用时我们给定的引用数据类型,避免产生强制转换的麻烦。但是再深入的使用,想要提高代码的重用时却还是生疏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值