JAVA容器类类库的用途为“保存对象”,一种是Collection,一种就是Map。
但不论是哪种容器类,都必须有某种方式可以插入元素,并将它们取回!例如List中可以使用add()插入元素,get()用来取出元素。
但是容器类必须指定确切的类型,比如ArrayList<Interger>,但如果要使用Map/Set呢?如何提高代码的复用率呢?
迭代器是一个对象,它的工作是遍历并选择序列中的对象。
- 使用iterator()要求容器返回一个Iterator。Iterator将返回序列中第一个元素。
- 使用next()方法获得序列下一个元素。
- 使用hasNext()检查序列是否还有元素。
- 使用remove()将迭代器新近返回的元素删除。
1 public class MyIterator { 2 public static void main(String[] args) { 3 ArrayList<Integer> aList=new ArrayList<>(); 4 aList.add(2);aList.add(4);aList.add(1); 5 Iterator<Integer> it=aList.iterator(); 6 System.out.println("size="+aList.size());//输出ArrayList原始大小 7 System.out.println(it.next());//利用迭代器输出List第一个元素 8 it.remove();//删除 9 System.out.println("size="+aList.size());//输出删除后List大小 10 display(it); 11 /* 12 * 改为LinkedList 13 * */ 14 System.out.println(); 15 LinkedList<Integer> ltd=new LinkedList<>(); 16 ltd.add(11);ltd.add(22);ltd.add(33); 17 display(ltd.iterator()); 18 19 } 20 public static void display(Iterator<Integer> its){ 21 while (its.hasNext()) { 22 int n=its.next(); 23 System.out.print(n+" "); 24 } 25 } 26 }
output:
size=3
2
size=2
4 1
11 22 33
如上图的display()方法,不需要考虑容器的具体类型,是LinkedList还是ArrayList之类
同时display()方法不包含任何有关它所遍历的序列的类型信息