第35讲 迭代器与Collections集合工具类

迭代器

Iterator:迭代器类,集合的专用遍历方式。可以说迭代器类其实是集合类的内部类。

它不依赖于索引遍历。

创建对象

Iterator<E> iterator() //返回此集合中元素的迭代器,

通过集合的iterator()方法得到

  • 迭代器是通过集合的iterator()方法得到的,所以我们可以说它是依赖于集合而存在的

成员方法

方法说明
boolean hasNext()如果迭代还有元素,则返回true(判断集合是否为空或是否遍历完毕)
E next()获取当前迭代元素,并后移指针。
void remove()删除迭代器所指向的元素。

注意:

  • 迭代器遍历完毕后,指针不会复位。

​ 如果想再次遍历,需要重新创建迭代器对象。

  • 循环中只能使用一次next()方法,因为next方法会后移指针。

​ 如果想多次使用next获取的数据,可以用一个变量接收。

  • 迭代器遍历过程中,不能使用集合的方法进行增删。

​ 如果想删除,可以使用迭代器提供的remove()方法。

​ 如果想增加,目前没有办法。

遍历集合的步骤

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

public class iteratorDemo {
    public static void main(String[] args) {
        Collection<String> coll = new ArrayList<String>();
        coll.add("Hello");
        coll.add("World");

        //1.用集合里的iterator()方法得到集合对象c的迭代器对象 it
        Iterator<String> it = coll.iterator();

        //2.使用hasNext()方法判断集合中是否还有元素
        while (it.hasNext()) {

            //3.使用next()方法获取元素
            String s = it.next();

            System.out.println(s); // Hello \n World
        }
    }
}

并发修改异常

并发修改异常ConcurrentModificationException。并发修改的意思就是同一时刻发生并修改。当方法检测到对象的并发修改,但不允许这种修改时,会抛出此异常。迭代器及并发修改异常

原理:

集合中的属性modCount在遍历时发生改变。

modCount记录了集合发生结构性修改的次数。

​ 结构性修改:改变list的size大小。如添加、删除元素;仅仅修改元素的内容不叫结构性修改。

​ 当遍历集合时,Iterator的对象将跟踪集合属性modCount当前记录的值。如果通过添加或删除元素来修改集合,modCount将发生改变,导致modCount的值前后不匹配,因此Iterator将抛出ConcurrentModificationException

Collections工具类

导包:java.util.Collections

Collections是一个集合操作工具类。

Collections常用方法

方法说明
static boolean addAll(Collection<T> c, T... elements)给单列集合批量添加元素
static void shuffle(List<?> list)打乱List集合中元素的顺序
static void sort(List<T> list)自然排序List集合
static void sort(List<T> list, Comparator<T> c)根据指定规则排序List集合
static int binarySearch(Lish<T> list, T key)在List集合中二分查找元素key
static void copy(List<T> old, List<T> new)拷贝List集合
static void max/min(Collection<T> coll)根据自然排序获取单列集合中元素最大/最小值
static void swap(List<?> list, int i, int j)交换List集合中指定位置的元素
static int fill(List<T> list, T obj)用指定元素填充List集合
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值