java常用集合方法

目录

一、Iterator接口

Iterator 是一个集合迭代器接口,它提供了以下方法:

  1. 判断迭代器中是否还拥有元素,有则返回true,否则返回false

    boolean hasNext();

  2. 获取迭代器中的下一个元素

    E next();

  3. 移除集合中的元素
    default void remove() { throw new UnsupportedOperationException("remove"); }

  4. 对迭代器中剩余的元素进行操作(从 jdk 8 开始)

    default void forEachRemaining(Consumer<? super E> action) {

    Objects.requireNonNull(action);

    while (hasNext())

    action.accept(next());
    }

二、Iterable接口

Iterable是一个迭代接口

java 复制代码
public interface Iterable<T> {
    /**
     * Returns an iterator over elements of type {@code T}.
     *
     * @return an Iterator.
     */
    Iterator<T> iterator();

    /**
     * Performs the given action for each element of the {@code Iterable}
     * until all elements have been processed or the action throws an
     * exception.  Unless otherwise specified by the implementing class,
     * actions are performed in the order of iteration (if an iteration order
     * is specified).  Exceptions thrown by the action are relayed to the
     * caller.
     *
     * @implSpec
     * <p>The default implementation behaves as if:
     * <pre>{@code
     *     for (T t : this)
     *         action.accept(t);
     * }</pre>
     *
     * @param action The action to be performed for each element
     * @throws NullPointerException if the specified action is null
     * @since 1.8
     */
    default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }

    /**
     * Creates a {@link Spliterator} over the elements described by this
     * {@code Iterable}.
     *
     * @implSpec
     * The default implementation creates an
     * <em><a href="Spliterator.html#binding">early-binding</a></em>
     * spliterator from the iterable's {@code Iterator}.  The spliterator
     * inherits the <em>fail-fast</em> properties of the iterable's iterator.
     *
     * @implNote
     * The default implementation should usually be overridden.  The
     * spliterator returned by the default implementation has poor splitting
     * capabilities, is unsized, and does not report any spliterator
     * characteristics. Implementing classes can nearly always provide a
     * better implementation.
     *
     * @return a {@code Spliterator} over the elements described by this
     * {@code Iterable}.
     * @since 1.8
     */
    default Spliterator<T> spliterator() {
        return Spliterators.spliteratorUnknownSize(iterator(), 0);
    }
}

从上面的源码可以看出,Iterable是一个接口,它提供了 以下三个方法:

  1. 返回一个可迭代对象

    Iterator<T> iterator();

  2. forEach 遍历(从jdk8开始)

    default void forEach(Consumer<? super T> action) {

    Objects.requireNonNull(action);

    for (T t : this) {

    action.accept(t);

    }
    }

  3. 返回一个用于遍历集合的 Spliterator。这个方法是Java 8引入的,它允许集合实现者提供一个高效的遍历器,而不需要像以前那样实现 Iterator 接口。

    default Spliterator<T> spliterator() {

    return Spliterators.spliteratorUnknownSize(iterator(), 0);
    }

    这里,Spliterators.spliterator 是一个静态方法,它接受一个集合和一个特征集合作为参数。特征集合是一个位掩码,用于指定 Spliterator 的特性,比如是否有序、是否并行等。在默认实现中,特征集合是 0,表示没有任何特性。

    如果你正在实现自己的集合类,并且想要提供一个更高效的 Spliterator,你可以覆盖这个方法,并提供你自己的实现。

三、Collection接口

Collection是一个集合接口,除了默认实现方法外,定义了集合操作的常用方法,如:

  1. 集合元素数量

    int size();

  2. 判断集合是否为空

    boolean isEmpty();

  3. 判断集合是否包含某个元素

    boolean contains(Object o);

  4. 返回一个迭代器

    Iterator<E> iterator();

  5. 返回包含此集合中所有元素的数组

    Object[] toArray();

  6. 添加元素

    boolean add(E e);

  7. 移除元素

    boolean remove(Object o);

  8. 判断集合是否包含指定集合中的所有元素

    boolean containsAll(Collection<?> c);

  9. 添加指定集合的所有元素

    boolean addAll(Collection<? extends E> c);

  10. 移除指定集合的所有元素

    boolean removeAll(Collection<?> c);

  11. 删除此集合中满足给定条件的所有元素(jdk8开始支持)

    default boolean removeIf(Predicate<? super E> filter) {

    Objects.requireNonNull(filter);

    boolean removed = false;

    final Iterator<E> each = iterator();

    while (each.hasNext()) {

    if (filter.test(each.next())) {

    each.remove();

    removed = true;

    }

    }

    return removed;
    }

  12. 仅保留此集合中包含在指定集合中的元素(可选操作)。换句话说,从此集合中删除未包含在指定集合中的所有元素。

    boolean retainAll(Collection<?> c);

  13. 从此集合中删除所有元素。此方法返回后,集合将为空。

    void clear();

  14. 返回一个用于遍历集合的 Spliterator(从jdk8开始支持)

    @Override
    default Spliterator<E> spliterator() {

    return Spliterators.spliterator(this, 0);
    }

  15. 返回一个Stream流(从jdk8开始支持)

    default Stream<E> stream() {
    return StreamSupport.stream(spliterator(), false);
    }

四、Collection与Iterable关系

Collection接口继承了Iterable接口,复用了Iterable中的相关方法。
public interface Collection<E> extends Iterable<E> {

相关推荐
2501_941875281 小时前
从配置中心到动态管理的互联网工程语法演进与多语言实践分享
开发语言·python
hfywmsj1 小时前
广州餐饮铺位招租决策模型:多因子选址系统设计
开发语言·人工智能·python·广州餐饮铺位招租
vx-Biye_Design2 小时前
SSM伴侣动物伴护星小程序06330-计算机课程设计、毕业设计
spring boot·后端·elasticsearch·小程序·架构·课程设计·idea
努力的lpp3 小时前
php反序列化一(大白话版)
开发语言·web安全·php·ctf·反序列化
2分钟速写快排4 小时前
什么是 RAG?如何用 RAG 实现一个用户记忆?
前端·后端·ai编程
菜鸟~noob2334 小时前
【电子战】第03篇:CFAR(恒虚警)处理【含matlab代码】
开发语言·matlab
面向Google编程4 小时前
Apache Iceberg Variant 类型:v3 半结构化数据不再「二选一」
大数据·后端
lhldsg4 小时前
全民健身解决方案小程序开发:从0到1的技术实战
java·数据库·需求分析
jason成都4 小时前
Spring WebFlux 适配达梦新方案|dm‑r2dbc:Netty 异步传输的实验性 R2DBC 驱动
java·后端·spring
泡海椒4 小时前
内置SPI函数库详解:JQuick-Java Builtin工具类实战用法
java·开发语言·python