回顾
数组和集合的区别:
1、数组的长度固定, 集合的长度是可变的;(默认的容量16)
2、 数组可以存放基本数据类型和引用数据类型,集合只能存引用数据类型
最大的集合接口: Collection
1、ListArrayList(有序,有索引,(以数组的方式来进行存放) 查询快,增删改慢)
2、LinkedList(有序,有索引,( 以链表的方式来进行存放)查询慢, 增删改快)
3、Vector(已经淘汰,特点是:多线程,是安全的)
泛型 :
泛型是对类 ,接口的后者方法的一个约束,泛型其实就是一个参数来替换所有的类型
注意: 泛型中没有继承
使用场景: 当不知道集合存放什么类型的数据的时候就使用泛型
一般表示泛型的字母:T、 E 、 W 、 K 、V
在实例化集合泛型的语法:
1、在jdk1.7之后(包括1.7)
ArrayList<Integer> list = new ArrayList<>();
//(后面<>里的可以省略,前面不可以进行省略)
2、在jdk1.7之前
ArrayList <Integer> list = new ArrayList<Integer>();
//必须这样写, 前后的泛型类型必须是一样
没有泛型的时候:
好处: 默认如果没有添加泛型,默认的是Object, 所有的数据类型都可以进行存放
坏处:不安全,会报错(java.lang.ClassCastException 强制类型转换错误)
有泛型的时候:
好处:1.避免强制转换类型 ; 2.把错误由运行出错提前到编译出错
坏处: 1.只能够存一种数据类型
注意点:如果使用迭代器来遍历集合,迭代器的泛型必须与集合的泛型是一致的
泛型约束类:
语法: 访问修饰符 关键字(class) 类名<泛型>{
类里的具体的内容
}
public class ArrayList <E>
注意点 :
1、在写这个类的具体的信息的时候,没有给其具体的类型
2.、在new 的时候给这个类具体的类型
3、当给类加泛型之后,类里所有的属性方法都可以使用这个泛型
方法来定义泛型:
作用: 也就是使用泛型对方法来进行约束
语法 :
访问修饰符 <泛型>返回值类型 方法的名称(参数(参数可以使用泛型的数据类型)){
方法体
}
ps:
public <T>void printWorld(T t){
System.out.println(t);
}
静态方法也可以加泛型,但是静态方法不能使用类的泛型,只能有方法的泛型
接口的泛型
语法:
访问修饰符 interface 接口的名称<T>{
抽象方法
}
ps:
public interface Iter<T> {
}
假如接口有泛型,实现类有两种表现形式:
1、实现类确定具体的泛型;
2、实现类不能够确定其泛型(在 new 的时候确定其泛型)
这种情况的语法:
public class IterUpdateImpl<T> implements IterUpdate<T> {
内容块
}
泛型的通配符 : ? 任意的泛型
特点:
1、不能在实例化的时候给?泛型
2、一般是作为参数的类型
<? extends E>
这种是表示 E 泛型的子类或者是它本身
<? super E>
这种是表示 E 泛型的父类或者它本身
Set
1、父类是Collection
3、不能包含重复的元素
3、无序(因此不能使用普通的for循环)
子类: HashSet
1、基层存的内容是由哈希表结构进行存放(查询速度快)
2、不能包含重复的元素,但是可以包含" "的数据
3、用于检查是否重复,执行了两个方法:
第一个是HashCode方法;第二个是equals( )方法
4、无序(和Set一样不能使用普通的for循环) :存入的数据顺序与取出来的顺序不一样
哈希表的结构![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/2ff0765c2505beb8c02a6fb164625470.png)
HashSet 常规的一些方法
add(E e)
添加数据
对set集合进行遍历的四种方法 :
1.第一种没有使用泛型,转换成数组的方式
2.使用带泛型,转换成数组的方式
3.使用迭代器的方式
4.使用增强for 循环的方式
LinkedHashSet(有序):
父类是HashSet(无序)
存放的方式是采用的数据+ 双重链表式
1、第一个链表用于来把相同hash值的元素进行串联
2、第二个链表式来记录每一个值的顺序
因此它是有序的:存与取都是一致的。
总结
今天学习的主要内容是泛型和set集合的一些相关知识,内容不多,同时学习的时候还是有很明确的条理性,因此个人感觉对今天学习的成效还是感到满意的,除此之外也发现了实际上后面学习的内容有很多是可以更简单的实现前面学习内容的需求的,Java真是博大精深啊!!!
疑问
泛型的那几个英文具体是指什么,在什么情况下应该使用哪一个泛型?