collection中用迭代器和foreach循环遍历
迭代器
迭代器(对集合进行遍历)
/*boolean hasNext()
如果迭代具有更多元素,则返回 true 。
E next()
返回迭代中的下一个元素。
Iterator是一个接口,我们无法直接使用,需要使用Iterator接口的实现类对象,获取实现类的方式比较特殊
Collection接口中有个方法,叫Iterator(),这个方法返回的就是迭代器的实现类对象
Iteratoriterator()返回在此collection的元素上进行迭代的迭代器。
使用迭代器的步骤
1.使用集合中的iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)
2.使用hasnext()
3.使用next()*/
代码:
public class Demo02CollectionIterator {
public static void main(String[] args) {
Collection<String> coll=new ArrayList<>();
coll.add("迪丽热巴1");
coll.add("迪丽冷巴2");
coll.add("迪丽雪巴3");
coll.add("迪丽晴巴4");
coll.add("迪丽雨巴5");
coll.add("迪丽雷巴6");
//多态接口类型跟随collection的类型。
Iterator<String> it = coll.iterator();
boolean b=it.hasNext();
System.out.println(b);//true
System.out.println(it.next());//迪丽热巴1
/*for (int i = 0; i < coll.size(); i++) {
System.out.println(it.next());
}*//*
迪丽冷巴2
迪丽雪巴3
迪丽晴巴4
迪丽雨巴5
迪丽雷巴6Exception in thread "main" java.util.NoSuchElementException
at java.util.ArrayList$Itr.next(ArrayList.java:862)
at cn.itcast.Collection.Demo02CollectionIterator.main(Demo02CollectionIterator.java:37)*///符合预期的错误,上面已经next一遍了。
//改进用while
while (it.hasNext())
{
System.out.println(it.next());//it.next()相当于内存中存放的堆,先进先出。指针后移。
}/*迪丽冷巴2
迪丽雪巴3
迪丽晴巴4
迪丽雨巴5
迪丽雷巴6*/
System.out.println(it.hasNext());//false
}
}
foreach
增强for循环,底层也是迭代器,使用for循环的格式,简化了迭代器的书写
collectionextends iterable:所有的单例集合都可以使用增强for
public interface iterable实现这个接口允许对象成为foreach语句的目标
格式:
for(集合/数组 变量名:集合名/数组名)
{
sout(变量名)
}
代码:
public class Demo03Foreach {
public static void main(String[] args) {
demo01();
demo02();
}
private static void demo02() {
ArrayList<String> list=new ArrayList<>();
list.add("迪丽热巴1");
list.add("迪丽热巴2");
list.add("迪丽热巴3");
list.add("迪丽热巴4");
list.add("迪丽热巴5");
list.add("迪丽热巴6");
list.add("迪丽热巴7");
list.add("迪丽热巴8");
list.add("迪丽热巴9");
list.add("迪丽热巴10");
for (String l:list
) {
System.out.println(l);
}
}
private static void demo01() {
int array[]={1,2,3,4,5,6,7,8,9,10};
for (int a:array) {
System.out.println(a);
}
}
}
显示效果:
1
2
3
4
5
6
7
8
9
10
迪丽热巴1
迪丽热巴2
迪丽热巴3
迪丽热巴4
迪丽热巴5
迪丽热巴6
迪丽热巴7
迪丽热巴8
迪丽热巴9
迪丽热巴10