Java集合框架——标准输出

输出集合中的元素,我们可以通过覆写toString()方法,或者利用List接口的get()方法,但这些都不是集合的标准输出。

那么,集合标准输出一共有以下四种方式:

  • Iterator
  • ListIterator
  • Enumeration
  • foreach

迭代输出——Iterator

集合输出的时候要形成以下的思路:只要碰到了集合输出的操作,就一定使用Iterator接口,这是最重要的标准。

1. Iterator接口的操作原理:

Iterator是专门的迭代输出接口,所谓的迭代输出就是将元素一个个进行判断,判断其是否有内容,如果有内容,则把内容输出。

2. Iterator接口实例化方式:

Iterator本身是一个接口,要想实例化,必须利用其子类—Collection接口来完成,在Collection接口中一个iterator()方法,该方法用于取得Iterator对象,因此我们可以利用这个方法来获取Iterator对象,然后调用Iterator相关方法完成输出操作。

即实例化Iterator接口的方法如下:

List<E> list=  new List子类<E>() ;
Iterator<E> iter = list.iterator() ;    // 为Iterator接口实例化

3. Iterator接口的方法:

方法描述
public boolean hasNext(); 判断是否有下一个元素
public E next();取得当前元素
 public default void remove(); 删除元素

范例1:使用Iterator接口标准输出

public class Test{
    public static void main(String[] args) {
     List<String> list=new ArrayList<>();
     list.add("hello");
     list.add("word");
     Iterator<String> iterator=list.iterator();//实例化Iterator对象
        while(iterator.hasNext()){
            String str=iterator.next();//取得当前元素
            System.out.println(str);
        }
    }
}

范例2:使用Iterator接口删除集合元素

public class Test{
    public static void main(String[] args) {
     List<String> list=new ArrayList<>();
     list.add("hello");
     list.add("word");
     Iterator<String> iterator=list.iterator();//实例化Iterator对象
        while(iterator.hasNext()){
            String str=iterator.next();
            if(str.equals("hello")){
                iterator.remove();
                // 使用集合提供的remove()方法,则会产生ConcurrentModificationException
                // list.remove("B") ;
                // 使用Iterator的remove方法则不会产生异常
                continue;
            }
            System.out.println(str);
        }
    }
}

注:在集合输出的时候,一般不修改集合中的元素,此处涉及同步问题。

双向迭代接口——ListIterator

Iterator输出有一个特点:只能由前向后进行内容的迭代处理

如果要想进行双向迭代,那么就必须依靠Iterator的子接口——ListIterator来实现

1. ListIterator接口实例化方式

Iterator接口实例化需要依靠它的子类Collection子类,而ListIterator接口的实例化则依靠List接口(不能使用Set接口

List接口提供了 listIterator()方法,该方法可以取得ListIterator的对象

public ListIterator listIterator();

即实例化 ListIterator接口的方法如下:

List<String> list=new ArrayList<>();
ListIterator<String> listIterator=list.listIterator();//实例化ListIterator对象

2. ListIterator接口的方法

方法描述
public boolean hasPrevious();判断是否有上一个元素
public E previous();取得上一个元素

3. ListIterator接口实现标准输出

public class Test{
    public static void main(String[] args) {
     List<String> list=new ArrayList<>();
     list.add("hello");
     list.add("word");
     ListIterator<String> listIterator=list.listIterator();//实例化ListIterator对象
        System.out.println("由前向后输出");
        while(listIterator.hasNext()){
            System.out.print(listIterator.next()+" ");
        }
        System.out.println("\n由后向前输出");
        while(listIterator.hasPrevious()){
            System.out.print(listIterator.previous()+" ");
        }
        }
    }

输出结果:

在这里需要注意:如果想实现由后向前的输出,那么应该首先进行从前向后的输出,否则无法实现双向

public class Test{
    public static void main(String[] args) {
     List<String> list=new ArrayList<>();
     list.add("hello");
     list.add("word");
     ListIterator<String> listIterator=list.listIterator();//实例化ListIterator对象
        System.out.println("\n由后向前输出");
        while(listIterator.hasPrevious()){
            System.out.print(listIterator.previous()+" ");
        }
        }
    }

输出结果:

 Enumeration枚举输出

 1.Enumeration实例化方式

前两种标准输出接口可以依靠Collection、List、Set等接口完成实例化,但是Enumeration想要实例化只能够依靠Vector子类,因为Enumeration最早的设计就是为Vector服务的,在Vector类中提供有一个取得Enumeration接口对象的方法:

public Enumeration elements()

2.Enumeration的方法

方法描述
public boolean hasMoreElements();判断是否有下一个元素
public E nextElement();取得元素

3.使用Enumeration输出

public class Test{
    public static void main(String[] args) {
    Vector<String> vector=new Vector<>();
       vector.add("hello");
       vector.add("word");
        Enumeration<String> enumeration=vector.elements();//实例化Enumeration对象
        while(enumeration.hasMoreElements()){
            System.out.print(enumeration.nextElement());
        }
        }
    }

foreach输出

从JDK1.5开始foreach可以输出数组,实际上除了数组之外也可以输出集合。 

范例:使用foreach输出

public class Test {
    public static void main(String[] args) {
         List<String> list=new ArrayList<>();
         list.add("hello");
         list.add("word");
         for(String str:list){
             System.out.println(str);
         }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值