我是靠谱客的博主 义气自行车,最近开发中收集的这篇文章主要介绍java中的forEach()方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

forEach( )方法

ArrayList集合: 中重写了该方法. 内部使用的是普通for循环, 依然是不可以调用集合的方法对集合进行修改的, 只能通过元素自带的set()方法进行修改, 如果是 基本数据类型 那么就一点都不可以进行修改.

@Override
    public void forEach(Consumer<? super E> action) {
        Objects.requireNonNull(action);
        final int expectedModCount = modCount; 
        final Object[] es = elementData;
        final int size = this.size;
        for (int i = 0; modCount == expectedModCount && i < size; i++)
            action.accept(elementAt(es, i));  //  需要重写accept() 方法
        if (modCount != expectedModCount)   //  一旦修改了元素就会在这里检查不通过,报错
            throw new ConcurrentModificationException();
    }
@FunctionalInterface
public interface Consumer<T> {

    void accept(T t);

    default Consumer<T> andThen(Consumer<? super T> after) {
        Objects.requireNonNull(after);
        return (T t) -> { accept(t); after.accept(t); };
    }
}

方法的使用:

public class ArrayListTest {
    public static void main(String[] args) {
        ArrayList<String> list=new ArrayList<>();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        list.add("赵六");

        //遍历
        list.forEach(s -> System.out.println(s));
    }
} 

LinkedList集合, TreeSet 集合,HashSet集合,中都有forEach() 方法. 方法都比较类似~

HashMap集合:中重写了该方法. 内部使用的是增强for进行遍历,

@Override
    public void forEach(BiConsumer<? super K, ? super V> action) {
        Node<K,V>[] tab;
        if (action == null)
            throw new NullPointerException();
        if (size > 0 && (tab = table) != null) {
            int mc = modCount;
            for (Node<K,V> e : tab) {
                for (; e != null; e = e.next)
                    action.accept(e.key, e.value);  //  这里的accept 方法, 在下面.  是一个抽象方法,需要重写,
            }
            if (modCount != mc)
                throw new ConcurrentModificationException();
        }
    }
@FunctionalInterface
public interface BiConsumer<T, U> {

    
    void accept(T t, U u);

   
    default BiConsumer<T, U> andThen(BiConsumer<? super T, ? super U> after) {
        Objects.requireNonNull(after);

        return (l, r) -> {
            accept(l, r);
            after.accept(l, r);
        };
    }
}

TreeMap集合:

@Override
    public void forEach(BiConsumer<? super K, ? super V> action) {
        Objects.requireNonNull(action);
        int expectedModCount = modCount;
        for (Entry<K, V> e = getFirstEntry(); e != null; e = successor(e)) {
            action.accept(e.key, e.value);//    需要重写了该方法

            if (expectedModCount != modCount) {
                throw new ConcurrentModificationException();
            }
        }
    }
@FunctionalInterface
public interface BiConsumer<T, U> {

    void accept(T t, U u);//  抽象方法
    
    default BiConsumer<T, U> andThen(BiConsumer<? super T, ? super U> after) {
        Objects.requireNonNull(after);

        return (l, r) -> {
            accept(l, r);
            after.accept(l, r);
        };
    }
}

数组:

数组里面没有对应的方法. 直接调会出错.

public class Test {
    public static void main(String[] args) {
        int[] arr={1,2,5,7,8};
//        arr.forEach()  // 无法调出来该方法,直接打出来会报红. 

        String[] srr={"fjdsjf","fhudaf"};
//        srr.forEach();

    }
}

欢迎大家评论点赞,讨论~

最后

以上就是义气自行车为你收集整理的java中的forEach()方法的全部内容,希望文章能够帮你解决java中的forEach()方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部