Collection、泛型
Day02 Collection、泛型 总结
第一章 Collection集合
1.1集合概述
1).“集合”:就是一个“容器”,可以装很多的“引用”。
2).它跟数组的区别:
1).数组:长度固定的;数组中存储的是同一类型的元素,可以存储基本数据类型值。
2).集合:长度不固定;集合存储的都是对象。而且对象的类型可以不一致。
1.2 集合框架
集合按照其存储结构可以分为两大类,分别是单列集合 java.util.Collection 和双列集合 java.util.Map。
List 的特点是元素有序、元素可重复。 Set 的特点是元素无序,而且不可重复。
1.3 Collection常用功能
1).添加:
1).public boolean add(E e) : 把给定的对象添加到当前集合中 。
注意:对于ArrayList永远返回:true;
对于Set集合,当存储重复元素时,会返回false。
2).删除:
1).public void clear() :清空集合中所有的元素。
2).public boolean remove(E e) : 把给定的对象在当前集合中删除。
注:如果有多个相同元素,只移除一个(第一个)。
3).判断:
1).public boolean contains(E e) : 判断当前集合中是否包含给定的对象。
2).public boolean isEmpty() : 判断当前集合是否为空。
4).获取:
1).public int size() : 返回集合中元素的个数。
2).public Object[] toArray() : 把集合中的元素,存储到数组中
5).遍历:
1).public Iterator iterator():获取一个迭代器;
第二章 Interator迭代器
2.1 Interator接口
1)Iterator 主要用于迭代访问(即遍历) Collection 中的元素,因此 Iterator 对象也被称为迭代器
2)获取迭代器的方法:
public Iterator iterator() : 获取集合对应的迭代器,用来遍历集合中的元素的。
3)格式:
public boolean hasNext() :如果仍有元素可以迭代,则返回 true。
public E next() :返回迭代的下一个元素。
迭代:即Collection集合元素的通用获取方式。在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来。
2.2增强for
1)格式:
for(元素的数据类型 变量 : Collection集合or数组){
//写操作代码
}
注意:新for循环必须有被遍历的目标。目标只能是Collection或者是数组。新式for仅仅作为遍历操作出现。
第三章 泛型
3.1 泛型的概述及好处
1)泛型:可以在类或方法中预支地使用未知的类型。
注意:一般在创建对象时,将未知的类型确定具体的类型。当没有指定泛型时,默认类型为Object类型。
2)好处:让编译器为我们的代码监督,只能向集合中添加指定类型的数据, 如果添加了其它类型数据,编译器立即编译错误。
注意:泛型是数据类型的一部分,我们将类名与泛型合并一起看做数据类型。
3.2 定义和使用含有泛型的类
1).格式:
class Student<E>{
public void add(E e){
}
public E get(){
return null;
}
}
2).泛型定义说明:
1).<E>中的E:可以是大写、也可以是小写;可以是一个字符,也可以是多个字符;
2).类中的方法可以使用这个类型名;
3)使用泛型: 在创建对象的时候确定泛型
例如, Student<String> list = new Student<String>();
3.3 含有泛型的方法
1)格式:修饰符 <代表泛型的变量> 返回值类型 方法名(参数){ }
2)使用泛型: 调用方法时,确定泛型的类型
//定义一个方法,可以接收5个相同类型的值
public <T> void sum(T t1,T t2,T t3,T t4,T t5){
System.out.println("t1 = " + t1);
System.out.println("t2 = " + t2);
System.out.println("t3 = " + t3);
System.out.println("t4 = " + t4);
System.out.println("t5 = " + t5);
}
public static void main(String[] args) {
Student stu = new Student();
stu.<Integer>sum(10,20,30,40,50);
stu.<String>sum("a", "b", "c", "d", "e");
}
3.4 含有泛型的接口
1)格式:修饰符 interface接口名<代表泛型的变量> { }
同泛型类:
public interface IA<E>{
public void add(E e);
}
3)使用格式:
1、定义类时确定泛型的类型
2、始终不确定泛型的类型,直到创建对象时,确定泛型的类型
3.5 泛型通配符
1).需求:定义一个方法,方法的形参:可以接收具有任何泛型的集合
<?> : 表示可以接收具有任何泛型的集合;
class Demo{
public static void main(String[] args){
ArrayList<String> list1 = new ArrayList<>();
ArrayList<Integer> list2 = new ArrayList<>();
ArrayList<Student> list3 = new ArrayList<>();
p1(list1);//OK的
p1(list2);//OK的
p1(list3);//OK的
p1("呵呵");//错误
}
public static void p1(ArrayList<?> list){
}
}
2).需求:class Person{}
class Student extends Person{}
class JavaStudent extends Student{}
请定义方法,参数可以接收具有:Student或者JavaStudent泛型的集合:上限
class Demo{
public static void main(String[] args){
ArrayList<Person> list1 = new ArrayList<>();
ArrayList<Student> list2 = new ArrayList<>();
ArrayList<JavaStudent> list3 = new ArrayList<>();
p1(list1);//错误
p1(list2);//OK的
p1(list3);//OK的
}
public static void p1(ArrayList<? extends Student> list){
}}
3).需求:定义方法,参数可以接收具有:Person或者Student泛型的集合:下限
class Demo{
public static void main(String[] args){
ArrayList<Person> list1 = new ArrayList<>();
ArrayList<Student> list2 = new ArrayList<>();
ArrayList<JavaStudent> list3 = new ArrayList<>();
p1(list1);//OK的
p1(list2);//OK的
p1(list3);//错误
}
public static void p1(ArrayList<? super Student> list){
}
}