前言

上一篇介绍了Set接口及其常用子类的的基本概念及使用方法,本篇将重点介绍集合的输出(迭代输出(Iterator)和双向迭代输出(ListIterator)),foreach等等

集合的输出

从之前讲解的集合操作中读者应该可以发现,如果要输出Collection,Set集合中的内容,可以将其转换为对象数组,而使用List则可以直接通过get()方法输出,但是这些都不是集合的的标准输出方式。在类集中提供以下4种常见的输出方式。

  • Iterator: 迭代输出,是使用最多的输出方式。
  • ListIterator: 是Iterator的子接口,专门用于输出List中的内容。
  • Enumeration: 是一个旧的接口,功能与Iterator类似。
  • foreach: JDK1.5之后提供的新功能,可以输出数组或集合。

注意:

4种输出操作以Iterator为操作的标准。

迭代输出:Iterator

Java 输出集合内存 java集合怎么输出_java

了解了基本原理之后,下面来看一下Iterator接口的定义:

public interface Iterator<E>
Iterator接口的使用也需要指定泛型,当然在此处指定的泛型类型需要与集合的泛型类型一致。此接口定义了3个方法,如表所示

Java 输出集合内存 java集合怎么输出_迭代_02

Iterator接口的相关操作

实例操作一:输出Collection中的全部内容

import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
public class IteratorDemo01{
public static void main(String[] args){
List<String> all=new ArrayList<String>();
all.add("Hello");
all.add("World");
all.add("_");
Iterator<String> iter=all.iterator();
while(iter.hashNext()){
System.out.print(iter.hashNext()+",");
     }
   }
}

实例操作二:使用Iterator删除指定内容

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class IteratorDemo02{
public static void main(String[] args){
List<String> all=new ArrayList<String>();
all.add("Hello");
all.add("_");
all.add("world");
Iterator<String> iter=all.iterator();
while(iter.hasNext()){
String str=iter.next();
if("_"equals(str)){
iter.remove();
}else{
System.out.print(str+",");
  }
}
System.out.println("\n删除之后的集合:"+all);
  }
}

双向迭代输出:ListIterator

Iterator接口的主要功能是由前向后单向输出,而此时如果想实现由后向前或者双向输出,则必须使用Iterator的子接口——ListIterator。

ListIterator接口中常用方法

Java 输出集合内存 java集合怎么输出_iterator_03

与Iterator接口不同的是,ListIterator接口只能通过List接口实例化,即只能输出List接口的内容

ListIterator接口的相关操作

实例操作一:进行双向迭代

import java.util.ListIterator;
import java.util.ArrayList;
import java.util.List;
public class ListIteratorDemo01{
public Static void main(String[] args){
List<String> all=new ArrayList<String>();
all.add("Hello");
all.add("_");
all.add("world");
ListIterator<String> iter=all.listIterator();
System.out.print("由前向后输出:");
while(iter.hasNext()){
String str=iter.next();
System.out.print(str+",");
}
System.out.print("\n由后向前输出:");
while(iter.hasPrevious()){
String str=iter.previous();
System.out.print(str+",");
   }
  }
}

在使用ListIterator接口进行双向输出时,如果想完成由后向前输出,则一定要先进行由前向后的输出。

Java新支持:foreach

foreach除了可以完成数组的输出,对于集合也同样支持。

import java.util.ArrayList;
import java.util.List;
public class ForeachDemo{
List<String> all=new ArrayList<String>();
all.add("Hello");
all.add("Hello");
all.add("World");
all.add("_");
for(String str:all){
System.out.print(str+",");
   }
  }
}

虽然foreach的功能强大,而且操作简单,但从实际开发上来讲,笔者还是建议读者使用Iterator接口完成输出功能。