Java容器类接口:Iterator,Collection,Map

Iterator

Iterator被称为迭代器,是一个对象,它的工作是遍历并选择序列中的对象,可以实现以下一些操作:

  • 使用方法iterator()要求容器返回一个Iterator,Iterator将返回序列的第一个元素;
  • 使用next()获取序列中的下一个元素;
  • 使用hasNext()检查序列中是否有元素;
  • 使用remove()将迭代器最近返回的元素删除;

Iterator只能向前移动,ListIterator是一个更加强大的Iterator的子类,它只能用于各种List类的访问,ListIterator可以双向移动,它能产生当前迭代器指向的列表中元素的前一个和后一个元素的索引,并且可以使用set()方法替换它访问过的最后一个元素。

Iterator在JDK中是一个接口,在JDK8中它的子接口包含

Iterator定义如下:

public interface Iterator<E> {

boolean hasNext(); //如果有元素可以迭代则返回true

E next(); //返回迭代的下一个元素

void remove(); //从迭代器指向的Collection中移除迭代器返回的最后一个元素

}

Iterator使用实例:

import java.util.ArrayList;
import java.util.Iterator;

public class IteratorTest {
    public static void play(Iterator<String> it) {
        while(it.hasNext()) {
            System.out.println(it.next());
        }
    }
    
    public static void main(String[] args) {
        ArrayList<String> ss = new ArrayList<String>();
        for(int i = 0; i < 7; i++) {
            ss.add("i:" + i);
        }
        play(ss.iterator());
    }
}

ListIterator允许按任意一方向遍历列表,迭代期间修改列表,并获得迭代器在列表中的位置。ListIterator没有当前元素,它的光标位置始终位于调用previous所返回的元素和调用next所返回元素之间。

ListIterator实现如下:

public interface ListIterator<E> extends Iterator<E> {

boolean hasNext(); //正向遍历列表时如果迭代器有多个元素,返回true

E next(); //返回列表中的下一个元素,可以重复使用迭代列表

boolean hasPrevious(); //反向遍历列表时如果迭代器有多个元素,返回true

E previous(); //返回列表中的上一个元素

int nextIndex(); //返回对next后续调用返回的索引

int previousIndex(); //返回对previous调用返回的索引

void remove(); //从列表中移除由next或previous返回的最后一个元素

void set(E e); //用指定元素替换next或previous返回的最后一个元素

void add(E e); //将指定元素插入列表

}

ListIterator使用实例:

import java.util.LinkedList;
import java.util.ListIterator;

public class ListIteratorTest {
    public static void play(ListIterator<String> it) {
        while(it.hasNext()) {
            System.out.print(it.next() + " " + it.nextIndex() + "|");
        }
        it.set("xxxxxxx");
        it.add("yyyyyyy");
        System.out.println();
        System.out.println(it.previous() + " " + it.next());
        while(it.hasPrevious()) {
            System.out.print(it.previous() + " " + it.previousIndex() + "|");
        }
    }
    
    public static void main(String[] args) {
        LinkedList<String> ls = new LinkedList<String>();
        for (int i = 0; i < 5; i++) {
            ls.add("aaaaaaa");
        }
        play(ls.listIterator());
    }
}

Collection

Collection是描述所有序列容器的共性根接口,使用接口可以创建富有通用性的代码,可以通过接口而非具体的实现来编写代码,如果编写的方法接受一个Collection,则该方法接受任何用于实现了Collection的类。

Collection接口继承自Iterable,在JDK8中它的子接口包含

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。