合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
### 概述 因为Collection接口中是没有共同属性下标的,set集合没有下标.所以提供了迭代器获取元素.所以迭代器跟下标没有关系. Java中提供了很多个集合,它们在存储元素时,采用的存储方式不同 .我们要取出这些集合中的元素,可通过一种通用的方式来完成 . collection集合元素的通用获取方式,在取元素之前先要判断集合中有没有此元素,如果有,就把这个元素取出来,继续再判断.如果还有就再取出来.一直把集合中的所有元素全部取出. 这种取出方式专业术语称为迭代 . 迭代器的作用就是面对不同的容器,采用相同的方式去获取元素 . 在Java中iterator是一个接口 . ### 迭代器的实现原理 ![](https://box.kancloud.cn/bd2b6e94f45ecd86f5c411249b0caeba_943x517.png) ![](https://box.kancloud.cn/9f49c04a2c93704854c13cb526db70cd_665x283.png) ### 方法 这些方法对集合通用 . #### hasNext() 判断集合中还有没有可以被取出的元素,如果有,返回true. #### next() 取出集合中下一个元素 . ### 使用方法 while ~~~ Collection<String> coll = new ArrayList<String>(); coll.add("a"); coll.add("b"); coll.add("c"); Iterator it = coll.iterator(); while(it.hasNext()){ System.out.println(it.next()); } ~~~ for ~~~ Collection<String> coll = new ArrayList<String>(); coll.add("a"); coll.add("b"); coll.add("c"); for (Iterator<String> it =coll.iterator();it.hasNext();){ System.out.println(it.next()); } ~~~ for循环比较节约内存 ### 集合中的转型 不指定存储的类型,就可以存储任意类型的数据了 . ~~~ public static void main(String[] args) { Collection coll = new ArrayList(); //这里没有指定存储的类型 coll.add("1234"); coll.add("123"); coll.add("12"); Iterator it = coll.iterator(); //迭代器这里也不能指定数据类型 while(it.hasNext()){ String x = (String)it.next(); //这里需要向下转型 System.out.println(x.length()); } } ~~~ 结果 ~~~ 4 3 2 ~~~ ~~~ Collection coll = new ArrayList(); coll.add(1); coll.add("1"); coll.add('1'); Iterator it = coll.iterator(); while(it.hasNext()){ System.out.println(it.next()); } } ~~~ 结果 ~~~ [1, 1, 1] ~~~ 在使用集合的时候最好指定集合类型, 否则传入的参数都是为object类型,如果需要使用元素的属性和方法需要向下转型 .