迭(dié)代器
Java.util.Iterator接口:迭代器(对集合进行遍历)
迭代器常用方法
boolean hasNext():检测集合是否还有下一个元素,返回boolea值;
E next():返回迭代的下一个元素
Iterator迭代器是一个接口,我们无法直接使用,需要使用Iterator接口接口的实现类对象,获取方式比较特殊;
Collection接口中的一个方法iterator():这个方法返回的就是迭代器实现类对象;
Iterator<E> iterator():返回在此 collection 的元素上进行迭代的迭代器
迭代器的使用步骤:
1、使用集合中的方法iterator()获取迭代器实现类对象,使用Iterator接口接收;
2、使用Iterator接口中的方法hasNext()判断还有没有下一个元素;
3、使用Iterator接口中的方法next方法去除集合中的下一个元素;
Collection<String> coll=new ArrayList<>();
coll.add("a");//添加给定的元素
coll.add("b");
coll.add("c");
Iterator<String> iterator = coll.iterator();
boolean b3 = iterator.hasNext();//判断集合中是否还有下一个值
System.out.println(b3);//true
String next = iterator.next();//返回集合的下一个值
System.out.println(next);//a
增强for循环:
底层使用的就是迭代器,使用for循环的格式,简化了迭代器的书写;
是jdk1.5之后出现的新特性;
作用:用来遍历集合/数组;
格式:
for(集合/数组的数据类型 变量名:集合名/数组名){
}
代码:
for (Object a:arrayList){
System.out.println(a);
}
泛型:
是一个未知的数据类型,当我们不确定什么数据类型的时候,就可以使用泛型;
好处:
1、避免了类型转换的麻烦,存储的是什么类型。取出的就是什么类型;
2、把运行期异常,提升到了编译期;
弊端:
泛型是什么类型,只能存储什么类型;
1、含有泛型的类
public class Person<E>{
private E name;
public E getName(){}
public void setName(E name){}
}
2、含有泛型的方法
格式:
修饰符 <泛型> 返回值类型 方法名(参数列表(使用泛型)){}
代码:
public <M> void med(M s){
System.out.println(s);
}
public static <M> void med(M s){
System.out.println(s);
}
3、含有泛型的接口
接口类:
public interface Inter<I> {
public abstract void med(I i);
}
实现类:
public class InterfaceImpl<I> implements Inter<I>{
@Override
public void med(I s){
System.out.println(s);
}
}
泛型的通配符:
?:代表的就是数据类型
使用方式:
不能创建对象使用;
只能作为方法的参数使用;
泛型的上限限定:
? extends E 代表的使用泛型只能是E类型的子类/本身;
泛型的下线限定:
? super E 代表的是泛型只能是E类型的父类/本身;
代码:
public static void main(String[] args) {
Collection<Integer> list1=new ArrayList<>();
Collection<String> list2=new ArrayList<>();
Collection<Number> list3=new ArrayList<>();
Collection<Object> list4=new ArrayList<>();
getE1(list1);
getE1(list2);//报错
getE1(list3);
getE1(list4);//报错
getE2(list1);//报错
getE2(list2);//报错
getE2(list3);
getE2(list4);
}
//上限限定 ? extends E 代表的使用泛型只能是E类型的子类/本身
public static void getE1(Collection<? extends Number> coll){}
//下限限定 ? super E 代表的事泛型只能是E类型的父类/本身
public static void getE2(Collection<? super Number> coll){}