java编程思想笔记---第11章:持有对象(2)

本文介绍了Java中的迭代器、LinkedList和栈。迭代器可遍历序列,Java的Iterator单向移动,ListIterator更强大且可双向移动。LinkedList实现List接口,插入移除快但查询慢,还可作栈、队列等。栈是后进先出容器,可用LinkedList实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

7.迭代器

iterator

迭代器是一个对象,它的工作是遍历并选择序列中的对象,而客户端程序员不必知道或关心该序列底层的结构。此外,迭代器通常被称为轻量级对象:创建它的代价小。也因为如此,Java的Iterator只能单向移动。用法:

1)使用方法iterator()要求容器返回一个Iterator。Iterator将准备好返回序列的第一个元素。

2)使用next()获得序列中的下一个元素。

3)使用hasNext()检查序列中是否还有元素。

4)使用remove()将迭代器通过it.next()返回的元素删除。例如:it.next();   it.remove();

但是,如果只是想遍历List,不打算修改,那么foreach语法会更简洁。

List,Set都可以产生Iterator对象。并且,通过iterator操作对象的方式都一样,不能关心List或Set的具体实现。这也正是Iterator的真正威力:能够将遍历序列的操作与序列底层的结构分离。

 ListIterator

ListIterator是一个更加强大的Iterator的子类型,它只能用于各种List类的访问。ListIterator可以双向移动。它还可以产生相对于迭代器在列表中指向的当前位置元素和后一个元素的索引。可以使用set()方法替换它访问过的最后一个元素。通过listIterator()方法产生一个指向List开始处的ListIterator,还可以通过调用listIterator(n)方法创建一个一开始就指向列表索引为n的元素处的ListIterator。

8.LinkedList

LinkedList也实现了List接口,它在list的中间插入和移除元素比ArrayList快,但查询比ArrayList慢。

LinkedList还添加了可以使其用作栈,队列,双端队列的方法。这些方法中有些只是名字有差异,或者只存在一点差异,以使得这些名字在特定用法的上下文环境中更加适用。例如:getFirst()和element()完全一样,都返回列表的第一个元素,如果List为空,则抛出NoSuchElementException。peek()方法与这两个方式一样,只是列表为空时返回null。

addFirst()与add()和addLast()相同,它们都将某个元素插入到列表的尾(端)部。

removeLast():移除并返回列表中的最后一个元素。

9.栈Stack

栈是指后进先出的容器。

LinkedList具有能够直接实现栈的所有功能的方法,因此可以直接将LinkedList作为栈使用。不过,有时一个真正的“栈”更能把事情讲清楚:

public class Stack<T> {
    private LinkedList<T> storage = new LinkedList<T>();
    public void push(T t){
        storage.addFirst(t);
    }
    public T peek(){
        return storage.getFirst();
    }
    public T pop(){
        return storage.removeFirst();
    }
    public boolean empty(){
        return storage.isEmpty();
    }
    public String toString(){
        return storage.toString();
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值