Java 集合遍历的几种方式有什么区别

  • for i 遍历

      这种遍历是 实现 RandomAccess集合遍历的首选,对于这样的集合 get(1)和get(10000)的速度一样的,都非常快,这种集合的底层是数组,知道集合的地址根据角标就可以计算出偏移量迅速找到元素

     mybait查询返回的list类型是ArrayList哦

    public static void main(String[] args) {

        List<Integer> list = new ArrayList<>(10_000);
        for (int i = 0; i < 10_000; i++) {
            list.add(i);
        }
        int size = list.size();
        for (int i = 0; i < size; i++) {
            handleSomeThing();
        }
    }

    public static void handleSomeThing() {
     
    }
  • 迭代器遍历

      对于没实现RandomAccess接口的集合,是不能用上面的for i 遍历的,因为性能太差了, 这种List底层是一个链表 get(0)和get(10000)的速度会差很多,只能通过0找到1 ,1找到2,...然后找到10000号元素的位置  

     使用迭代器遍历时候,是不能使用集合的删除方法的,否则会抛出一个异常的

 public static void main(String[] args) {

        List<Integer> list = new LinkedList<>();
        for (int i = 0; i < 10_000; i++) {
            list.add(i);
        }

        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()) {
            Integer next = iterator.next();
            handleSomeThing();
        }
    }

    public static void handleSomeThing() {

    }
  • 超级for遍历

  底层也是用迭代器实现的

   public static void main(String[] args) {
 
        List<Integer> list = new LinkedList<>();
        for (int i = 0; i < 10_000; i++) {
            list.add(i);
        }

        for (Integer i : list) {
            handleSomeThing();
        }
    }

    public static void handleSomeThing() {

    }
  • java8 的stream遍历

     这种遍历会开启多线程的,试试下面的代码吧

 public static void main(String[] args) {

        List<Integer> list = new LinkedList<>();
        for (int i = 0; i < 10_000; i++) {
            list.add(i);
        }

        long startTime = System.currentTimeMillis();
        list.parallelStream().forEach(integer -> {
            handleSomeThing();
        });
        long endTime = System.currentTimeMillis();
        System.out.println(endTime - startTime);
    }

    public static void handleSomeThing() {
        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

猜你喜欢

转载自www.cnblogs.com/yangmingzi/p/11199075.html