day17_Collection集合 迭代器 增强for循环 泛型

今日内容

  • Collection集合

  • 迭代器

  • 增强for循环

  • 泛型

Collection集合

  集合:集合就是一种存储数据的容器,之前的ArrayList集合

  1.集合和数组的区别

1.数组长度固定。 集合是长度可变的
2.数组只能存储同一种数据类型,包括基本数据类型和引用数据类型(对象数组)。集合存储的都是对象,而且可以在同一集合中存储不同类型的数据。

  2.集合的分类

在使用API的时候,先了解其继承与接口的框架,才能了解何时使用哪个类

集合可以根据存储结构将其分为两大类:单列集合:java.util.List。和双列集合:java.util.Set。其中,
Collection接口有三个实现类:Vector集合,ArrayList集合,LinkedList集合
Set接口也有三个实现类:TreeSet集合,HashSet集合,LinkedHashSet集合,

  3.其子接口的特点

Collection是单列集合的根接口,
List子接口集合的特点是:元素有序,元素可重复,有索引。其子类有上述三种
Set接口集合特点是:元素不重复,没有索引。其子类也是上述三种。

  4.Collection集合的常用功能【重点】

public boolean add(E e):把给定的对象添加到当前的集合中
public void clear():清空集合当中的所有元素。(此删除只是集合中删除,但是内存中还存在)
public boolean remove(E e):把给定的对象从当前集合中删除掉
public boolean contains(E e):判断当前集合当中是否包含给定的对象元素
public boolean isEmpty(): 判断当前集合是否为空
public int size(): 获取当前集合元素的个数
public Object[] toArray(): 把当前集合中的元素存储到一个数组当中 

迭代器(Iterator)接口

    迭代器:java.util.Iterator接口。用于迭代访问Collection和Map接口中的元素。因此,将Iterator称为迭代器。

  1.格式:

public Iterator iterator(): 获取集合对应的迭代器,用来遍历集合当中的元素。

  2.迭代的概念

迭代:Collection集合元素的通用获取方式。

  3.常用API方法:

public E next():获取迭代的下一个元素
public boolean hasNext():如果集合当中仍有元素可以迭代,则返回true,如果没有,则返回false

  4.迭代器的实现原理

调用Iterator接口当中的next方法之前,迭代器的索引位于-1,不指向任何元素,
当第一次调用next方法后,迭代器的索引会向后移动一位,指向第一个元素并将该元素返回,
当再次调用next方法时,迭代器的索引会指向第二个元素并将该元素返回,以此类推,直到hasNext方法返回false时,表示迭代器达到了集合的末尾,终止对元素的遍历,
如果强硬的获取没有的元素,此时程序就会抛出java.util.NoSuchElementException

Iterator<E>接口也是有泛型的,迭代的泛型是跟着集合一样,集合定义什么类型,迭代器就是什么类型。

增强for循环

  JDK1.5之后的高级循环结构:for each 循环,只能用来遍历数组和集合。内部原理是有个迭代器Iterator,在迭代过程中,不能对集合当中的元素进行增删操作。

  1.格式

for(元素的数据类型   变量名  :  Collection集合或者数组的名){
//操作代码
//....
}

练习:(遍历数组)

int[] arr={3,5,7,9,12};
for(int a : arr){
    System.out.println(a);
}

(遍历集合)

Collection <String> coll =new ArrayList<>();
coll.add("姚明");
coll.add("科比");
...
...
for(String str : coll){
    System.out.println(str);//str 表示集合中的每个元素
}

 

泛型

预支类或者方法中的未知数据类型。是一个数据类型,可以看做是一个接受数据类型的变量。

泛型也是数据类型的一部分,一般我们将类名和泛型合并一起看作数据类型。

  泛型的好处:

1.避免了类型转换的麻烦,存入什么数据类型,取出就是什么数据类型
2.运行期异常(跑起来的异常)提升到编译期阶段(写代码的时候就会报错)

  类名使用泛型

修饰符 class 类名<代表泛型的变量>{

}

  方法定义泛型(方法定义类可以不用定义)

修饰符<代表泛型的变量> 返回值类型  方法名(参数列表){

}

  接口定义泛型和使用

修饰符  interface 接口名<代表泛型的变量>{

}

使用:
1.定义实现类的时候,可以确认泛型的类型
public class 实现类名 implements 父接口 <String >{

@Override
public void add(String e){

//...
}

}

 

2.始终不确定泛型的类型,直到创建对象时
public class 子实现类名 implement  父接口名<泛型>{
@Override
public void add(T t){
//...
}
}

 

 

 

  

 

posted @ 2020-12-01 21:16  wajueji  阅读(98)  评论(0)    收藏  举报