Collection集合元素的通用获取方式:在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续判断,如果还有就再取出来。一直把集合中的元素全部取出。这种取出方式专业术语称为迭代。
集合中把这种取元素的方式描述在Iterator接口中。Iterator接口的常用方法:
迭代器的代码实现:
import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class IteratorDemo { public static void main(String[] args) { Collection<String> coll = new ArrayList<String>(); coll.add("abc1"); coll.add("abc2"); coll.add("abc3"); coll.add("abc4"); //迭代器,对集合ArrayList中的元素进行取出 Iterator<String> it = coll.iterator(); while(it.hasNext()){ String s = it.next(); System.out.println(s); }
迭代集合元素图解:
集合元素的向下转型
集合中可以存储任何对象,但是存放进去的数据提升成了Object。集合中存储其实都是对象的地址。基本类型包装类提供了自动装箱操作(基本类型->对象),这样,集合中的元素就是基本类型的包装类对象。存储时提升了Object,取出时要使用元素的特有内容,必须向下转型。
Collection coll = new ArrayList(); coll.add("abc"); coll.add("aabbc"); coll.add("abctest"); Iterator it = coll.iterator(); while (it.hasNext()){ //向下转型 String str = (String)it.next(); System.out.println(str.length()); }
注意:如果集合中存放的是多个对象,这时进行向下转型会发生类型转换异常。
Iterator接口也可以使用<>来控制迭代元素的类型
Collection<String> coll = new ArrayList<String>(); coll.add("abc"); coll.add("aabbc"); coll.add("abctest"); Iterator<String> it = coll.iterator(); while (it.hasNext()){ String str = it.next(); //当使用Iterator<String>控制元素类型后,就不需要强转了。获取到的元素直接就是String类型 System.out.println(str.length()); }
增强for循环 专门用来遍历数组和集合的,它的内部原理其实是个 Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。
格式:for(元素的数据类型 变量 : Collection集合or数组){}
代码实现:
public class ForEachDemo { public static void main(String[] args) { function(); } /* * 实现for循环,遍历数组 * 好处: 代码少了,方便对容器遍历 * 弊端: 没有索引,不能操作容器里面的元素 */ public static void function(){ int[] arr = {3,1,9,0}; for(int i : arr){ System.out.println(i+1); } System.out.println(arr[0]); } }
for对于对象数组遍历的时候,也是可以调用对象的方法的
public class ForEachDemo { public static void main(String[] args) { function_1(); } public static void function_1(){ String[] str = {"abc","itcast","cn"}; for(String s : str){ System.out.println(s.length()); } } }
增强for循环遍历集合:
import java.util.ArrayList; import demo.Person; //已经写过的demo包中Person类 public class ForEachDemo { public static void main(String[] args) { function_2(); } /* * 增强for循环遍历集合 * 存储自定义Person类型 */ public static void function_2(){ ArrayList<Person> array = new ArrayList<Person>(); array.add(new Person("a",20)); array.add(new Person("b",10)); for(Person p : array){ System.out.println(p); } }