Iterator迭代输出
在之前集合输出的时候都利用了toString(),或者是利用了List接口中的get()方法,但是这些都不是集合的标准输出模式,如果从标准上来讲,集合的输出一定有四种手段:Iterator ListIterator Enumeraration foreach。
迭代输出:Iterator(95%)
在JDK1.5之前Collection接口里面就定义有iterator()方法,通过此方法可以取得Iterator接口的实例化对象,在JDK1.5之后将此方法提升为了Iterable接口中的方法,但是不管你如何提升,必须清楚只要Collection有这个方法,那么List Set也此方法
对于Iterator接口最初的设计里面实际上有三个抽象方法,
判断是否有下一个元素:public boolean hasNext()
取得当前元素:public E next()
删除元素:public default void remove() 此方法从JDK1.8开始变为了default完整方法了,
范例:标准的Iterator使用
1 package cn.Tony.demo; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 import java.util.List; 6 7 public class TestDemo{ 8 public static void main(String[] args) throws Exception { 9 List<String> all=new ArrayList<String>(); 10 all.add("Hello"); 11 all.add("Hello"); 12 all.add("World"); 13 Iterator<String> iter=all.iterator();//实例化Iterator接口对象 14 while(iter.hasNext()) { 15 System.out.println(iter.next()); 16 } 17 } 18 }
对于Iterator接口中提供的remove()方法主要解决的就是集合内容的删除操作()。
1 package cn.Tony.demo; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; 5 import java.util.List; 6 7 public class TestDemo{ 8 public static void main(String[] args) throws Exception { 9 List<String> all=new ArrayList<String>(); 10 all.add("Hello"); 11 all.add("Hello"); 12 all.add("a"); 13 all.add("World"); 14 Iterator<String> iter=all.iterator();//实例化Iterator接口对象 15 while(iter.hasNext()) { 16 String str=iter.next(); 17 if("a".equals(str)) {//要删除的数据 18 // all.remove("a");//如果执行此操作,则删除了后面中断执行了 19 iter.remove();//如果不中断后续输出,就执行 20 continue; 21 } 22 System.out.println(str); 23 } 24 } 25 }
集合的核心功能在于数据的增加和数据的取出,所以对于这种删除的操作根本就没有意义,开发中可能使用到的几率0.01,以后见到了集合输出的问题,不用思考直接使用Iterator接口
ListIterator双向迭代(0.01%)
Iterator输出接口有一个特点:只能够由前向后进行内容的迭代处理,如果要想进行双向迭代,那么就必须依靠Iterator的子接口:ListIterator来实现,首先观察定义方法:
判断是否有上一个元素:public Boolean hasPrevious()
判断取得上一个:public E previous();
Iterctor接口的对象是有Collection接口支持的,但是ListIterator是有List接口支持的,
取得ListIterator接口对象:public ListIterator<E>listIterator()
范例:观察ListIterator使用
1 package cn.Tony.demo; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 import java.util.ListIterator; 6 7 8 public class TestDemo{ 9 public static void main(String[] args) throws Exception { 10 List<String> all=new ArrayList<String>(); 11 all.add("Hello"); 12 all.add("World"); 13 ListIterator<String> iter=all.listIterator(); 14 System.out.println("由前向后输出"); 15 while(iter.hasNext()) { 16 System.out.println(iter.next()+","); 17 } 18 System.out.println(" 由后向前输出:"); 19 while(iter.hasPrevious()) { 20 System.out.println(iter.previous()+","); 21 } 22 } 23 }
如果要想实现由后向前的输出,首先由前向后的输出,否则无法实现双向。
枚举输出:Enumeration(4.8)
在JDK1.0的时候就引入了Enumeration输出接口,而在JDK1.5的时候针对其也做了更正,主要是追加了泛型的应用,来观察Enumeration的接口定义:
判断是否下一个元素:public boolean hasMoreElements()
取得元素: public E nextElement()
但是如果要想取得这个接口的实例化对象,是不可能依靠Collection List Set等接口的,只能依靠Vector子类,因为Enumeration最早的设计就是为Vector服务的,在Vector类中有一个取得Enu meratio对象的方法
取得Enumeration接口对象 :public Enumeration<E> elements()
范例:使用Enumeration输出
1 package cn.Tony.demo; 2 3 import java.util.Enumeration; 4 import java.util.Vector; 5 6 public class TestDemo{ 7 public static void main(String[] args) throws Exception { 8 Vector<String> all=new Vector<String>(); 9 all.add("Hello"); 10 all.add("Hello"); 11 all.add("World"); 12 Enumeration<String> enu=all.elements(); 13 while(enu.hasMoreElements()) {//判断是否下一个元素 14 System.out.println(enu.nextElement()); 15 } 16 } 17 }
一些操作的类库上依然只是Enumeration,而不支持Iterator,虽然很少,但是在开发中必定要使用。
foreach输出
将JDk1.5开始foreach可以输出数组,实际上除了数组之外,也可以输出集合操作。不管对于初学者而言不建议这样处理。
范例:直接使用foreach输出
1 package cn.Tony.demo; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 public class TestDemo{ 7 public static void main(String[] args) throws Exception { 8 List<String> all=new ArrayList<String>(); 9 all.add("Hello"); 10 all.add("Hello"); 11 all.add("World"); 12 for(String str:all) { 13 System.out.println(str); 14 } 15 } 16 }
如果从代码的本质上来讲此处少了一个对象,但是Iterator只是一个输出对象,而是所有的内容还是在集合本身,对象占点空间没什么。
总结:
1.看见集合输出就使用Iterator
2.Iterator和Enumeration接口中的方法一定要掌握牢固.
Collections工具类
Collection是集合的接口,而Collections是一个集合操作的工具类。例如:反转 排序。
范例:创建空集合
1 package cn.Tony.demo; 2 3 import java.util.Collections; 4 import java.util.List; 5 6 public class TestDemo{ 7 public static void main(String[] args) throws Exception { 8 List<String> all=Collections.EMPTY_LIST; 9 all.add("A"); 10 } 11 }
范例:利用Collection进行集合操
1 package cn.Tony.demo; 2 3 import java.util.ArrayList; 4 import java.util.Collections; 5 import java.util.List; 6 7 public class TestDemo{ 8 public static void main(String[] args) throws Exception { 9 List<String> all=new ArrayList<String>(); 10 Collections.addAll(all, "A","B","C"); 11 Collections.reverse(all); 12 System.out.println(all); 13 } 14 }