JAVA集合

JAVA中的集合

内容将长期不断更新
有错误请指正,不胜荣幸
参考JAVA核心技术第10版

Collection

接口

在JAVA类库中,集合类的基本接口是CollectionMap
这个接口有两个基本方法additerator

迭代器 Iterator

Iterator接口

看下面的代码

public interface Iterator<E> {

    boolean hasNext();
    
    E next();
    
    default void remove() {
        throw new UnsupportedOperationException("remove");
    }
    
    default void forEachRemaining(Consumer<? super E> action){
    	Objects.requireNonNull(action);
        while (hasNext())
        action.accept(next());
    }
}

通过反复调用next方法,可以访问集合中的每一个元素,并对其进行某些操作。但是next方法达到了集合的末尾,继续调用将会发生NoSuchElementException异常。而解决这种问题的办法就是在调用next方法前,先调用hasNext方法。如果集合中还有元素能供迭代器进行访问,则返回true,否则返回false


JAVA中的迭代器和其他类库中的迭代器是不一样的。类如C++中的迭代器,它会根据索引下标的方式来进行访问下一个元素,而JAVA的迭代器是位于两个元素中间,当next操作执行的同时,迭代器就越过下一个元素,并将越过的元素返回。如图所示
在这里插入图片描述

  • 下面代码进行演示
		//迭代器Iterator.
		Iterator<Integer> iter = list.iterator();	
		
		while(iter.hasNext()) {
			int elem = iter.next();
			System.out.println(elem);
		}
		
		//使用Collection中提供的for each方法
		//由于Collection接口扩展了Iterator接口,所以Java中的集合框架都可以使用for each迭代循环
		for(int elem : list) {
			System.out.println(elem);
		}

JAVA中的Collection接口扩展了Iterator接口,所以在JAVA中几乎所有的集合都可以使用迭代器来循环访问集合。另外需要注意的是:元素被访问的顺序和集合的类型有关

forEachRemaining

JAVA SE 8中甚至不用写循环,可以调用forEachRemaining方法,然后提供一个lambda表达式。那么将会对迭代器的每一个元素调用这个lambda表达式,直到再没元素为止。

Remove

Remove方法将会删除上次调用next方法返回的那个元素。查看迭代器循环过程
但JAVA的迭代器并不是按照索引下标来进行寻址访问,而是返回越过的那个元素。所以这就导致了一个问题:删除两个并列元素不能直接如下操作

		iter.remove();
		iter.remove();

这样会导致一个java.lang.IllegalStateException异常。所以连续删除前需要先调用next方法。如下:

		iter.next();
		iter.remove();
		iter.next();
		iter.remove();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值