数组、集合的遍历(一)

一、遍历数组的3种方式

int[] arr = { 12, 4, 1, 66, 54, 6, 74, -3 };

// 第一种:for循环
for (int i = 0; i < arr.length; i++) {
    System.out.print(arr[i] + ",");
}

// 第二种:增强for循环/foreach循环(这是java的一个语法糖)- 底层就是for循环(说明白了就是:编译后的代码仍为for循环)
for (int i : arr) {
    System.out.print(i + ",");
}

// 第三中:利用jdk自带的方法 --> java.util.Arrays.toString()
System.out.print(java.util.Arrays.toString(arr));

参考:JavaSE基础(32) 遍历数组的3种方式 

二、遍历集合的4种方式

// 以ArrayList为例,初始化一个ArrayList
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
    list.add(i);
}

// 第一种:for循环
for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}

// 第二种:增强for循环/foreach循环(这是java的一个语法糖)- 底层就是迭代器(说明白了就是:编译后的代码仍为迭代器)
for (Integer i : list) {
    System.out.println(i);
}

// 第三种:迭代器
Iterator<Integer> iterator = list.iterator();

while (iterator.hasNext()) {
    Integer i = iterator.next();
    System.out.println(i);
}

// 第四种:使用Iterable接口中jdk1.8新增的default方法forEach+lambda表达式
list.forEach((i) -> { // 普通lambda
    System.out.println(i);
});
list.forEach(i -> System.out.println(i)); // 只有一行语句时可以简写的形式
list.forEach(System.out::println); // 方法引用

 说明(4种迭代方式对比):

  1. for循环:此种方式在遍历ArrayList时效率会高一些,因为ArrayList底层使用的是数组实现的,所以可以认为ArrayList中的元素都是有下标的,而此种普通for循环中的变量i可以快速的定位到ArrayList中的元素。
  2. 增强for循环/foreach循环和迭代器:可以认为增强for循环/foreach循环是迭代器的一种简便的写法,而迭代器比较适合遍历LinkedList,因为它底层使用的是链表的数据结构。
  3. 使用forEach方法+lambda表达式:如果使用的是jdk8以上的版本,那么建议使用此种方式,该方式内部默认的使用增强for循环去遍历集合,不过在ArrayList类中重写了forEach方法,里面使用了普通的for循环去遍历。不管使用哪一种,这种方式底层会选择最优的遍历方式。

参考:[java]遍历集合的四种方式 

 三、说明

  1. JDK 1.5,引入增强for循环/foreach循环 - 写法更简单
  2. 使用增强for循环/foreach循环不用担心性能问题,因为:在编译期间,JDK 1.5的编译器会把增强for循环/foreach循环,看成对应的传统方式(数组的传统方式为for循环、集合的传统方式为迭代器)
  3. 截至到JDK 1.4为止,始终无法在Java程序里限定Collection中所能保存的对象的类型――它们全部被看成是最一般的Object对象。一直到JDK 1.5中,引入了“泛型(Generics)”机制之后,这个问题才得到了解决。现在可以用Collection<T>来表示全部元素类型都是T的Collection。

     注:JDK 1.5引入的功能:枚举、泛型、增强for循环/foreach循环

参考:Java for循环的几种用法详解 

          Java中数组和集合的foreach操作编译后究竟是啥

 

参考:

https://www.cnblogs.com/redcoatjk/articles/4863340.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值