Collection、迭代器

本文介绍了Java中Collection集合,对比其与数组的区别,列举常用方法。还讲述了Interator迭代器,包括获取方式、遍历步骤,以及增强for循环遍历。此外,详细讲解了泛型,如定义、好处、擦除,还介绍了泛型类、方法、接口的定义与使用,以及泛型通配符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Collection集合
1.集合就是一个容器,这个容器可以存放多个元素;数组 也可以存放多个元素,那么他们的区别:
1)、数组长度固定,集合长度可以发生改变
2)、数组既可以存放基本类型,也可以存放引用类型,集合只能存放引用类型。
2.集合框架:
1)、Collection是所有单列结合的根接口(现在学习的都是单列集合)。
3.Collection常用方法:
public boolean add(E e):把给定的对象添加到当前集合中。
public void clear():清空集合中所有的元素。
public boolean remove(E e): 把给定的对象在当前集合中删除。(只能删除一个相同元素)。
public boolean contains(E e): 判断当前集合中是否包含给定的对象。
public boolean isEmpty(): 判断当前集合是否为空,为空true,非空false。
public int size(): 返回集合中元素的个数。
public Object[] toArray(): 把集合中的元素,存储到数组,将集合转成Object数组。
二、Interator迭代器
1.我们之前使用的for循环根据索引依次获取集合中的每一个元素,这种方式并不能适用于所有的集合,因为有些集合是没有索引的。
2.有一种通用的遍历方式,这个遍历方式叫做迭代器。迭代器是一个遍历集合的工具,里面有一个光标,这个光标最开始指向集合的最开头(最左边)。
3.如何获取集合的迭代器:调用Collection中的iterator方法即可.
1)、Iterator iterator():获取集合的迭代器.
2)、Iterator,表示的就是迭代器,如果要使用迭代器遍历,那么我们还需要使用迭代器中的方法
boolean hasNext():判断当前光标位置有没有元素,如果有元素,那么结果就是true。
E next():获取当前光标位置的元素,然后把光标后移。
4.迭代器遍历的步骤:
1)、调用集合的iterator方法获取集合的迭代器对象
2)、调用Iterator迭代器的hashNext方法,判断是否有元素可以获取
3)、如果有元素可以获取,那么就调用迭代器的next方法, 获取元素并且把光标后移。
4)、ArrayList集合的迭代器其实就是它里面的一个内部类,当调用集合的iterator方法时,会创建一个迭代器对象并返回。
5.在JDK5之后,多了一个新的遍历方式,叫做增强for循环遍历(foreach)
1)、格式:
for(数据类型 变量名 :容器名){
//…
}
格式解释:
数据类型:要遍历的容器里面的数据是什么类型的,那么这个数据类型就写什么类型
变量名:表示容器中的每一个元素
容器名:这个容器可以是一个数组,也可以是一个集合。JDK规定,实现了Iterable接口,才可以成为增强fao循环的目标。
2)、增强for循环是普通for的语法糖(本质没有变,只是语法简洁),使用增强for遍历数组,本质还是普通for遍历数组。
3)、增强for的优点以及缺点:
优点:增强for省去了索引的操作,语法更加简洁。
缺点:不能操作索引,所以如果遍历的时候需要使用索引,还得用普通for循环。
6.增强for遍历集合
1)、格式:
for(数据类型 变量名 : 容器名){
//…
}
增强for遍历集合,本质还是用迭代器在遍历。
三、泛型
1.泛型:就是一种未知的不确定的数据类型。
1)、比如ArrayL,里面的E就是一个泛型,他是一个未知的不确定的数据类型。当我们使用这个类(创建对象)的时候,才能够确定这个泛型类型E它所表示的类型真正是什么。
2)、泛型是可以省略的,如果省略泛型,那么默认是Object。
2.泛型的好处:
1)、省去了强转的代码。
2)、将运行时的错误提前到了编译时期。
3.Java中的泛型都是伪泛型,只在源代码中有效,一旦编译后,这个泛型就会消失,叫做泛型擦除。
四、泛型的定义以及使用
1.泛型就是一种未知的不确定的数据类型。
2.如果在类名后面加上,那么这个类就是一个泛型类,注意,里面E可以使用任何字母代替。类名后面的表示定义了一种未知的不确定的数据类型,并且可以在这个类中去使用这个未知的数据类型E。
3.当我们使用这个类的时候,才能确定这个E表示的数据类型真正是什么。
4.如果想要延后泛型的确认时机,缩小泛型的使用范围。让泛型只能在当前方法中使用,并且让泛型确认的时机在调用方法的时候才确认,那么可以使用方形方法(吧泛型定义在方法上)
1)、格式:
public <泛型> 返回值类型 方法名(参数类型 参数名){
方法体;
}
2)、在方法上定义的泛型,必须等到调用犯法的时候才能确定这个泛型到底是什么类型。
5.总结:
1)、泛型类是定义在类上的泛型,这个泛型所表示的数据类型必须等到使用这个类的时候才能确定
2)、泛型类定义在方发上的泛型,这个泛型所表示的数据类型必须等到使用这个方法的时候才能确定。
6.如果把泛型定义在接口后面那么这个就是泛型接口。接口上面定义的泛型,既可以当做方法参数,也可以当做返回值。
7.泛型接口的使用:
1)、实现类在实现接口的时候,直接确定出来这个泛型的数据类型。
2)、实现类在实现接口的时候,可以不确定泛型的类型。在使用实现类的时候,才确认这泛型是什么。定义泛型一定要在当前类或者接口名后面。
public calss A implements B{}
前面的泛型实在定义泛型,表示定义了一个不确定的数据类型T
后面的泛型 实在使用这个泛型,使用这个泛型到底是什么类型的。
8.泛型通配符
1)、泛型通配符?,可以匹配任意类型的泛型。比如:ArrayList

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值