Java集合的几种遍历方式及区别

1 普通数组遍历

普通数组遍历就是普通的for循环遍历
 

如下:

public static void main(String[] args) {
        List<Integer> list = new ArrayList<>() ;
        list.add(1) ;list.add(2) ;list.add(3) ;list.add(4) ;list.add(5) ;list.add(6) ;
		for(int i=0;i<list.size();i++) {
		    System.out.println(list.get(i)) ;
		}
        

 
 

2、迭代器遍历

 

2.1 增强for循环

 
如下:

for (Integer i : list) {
            System.out.println(i);
        }

 
增强for循环是jdk1.5之后出来的一个高级的for循环,主要针对数组和集合的遍历。
 
增强for循环的顶层原理就是迭代器,我们查看Collection的源码,会发现他继承了:Iterable接口,任何继承了Iterable接口的都可以使用增强for循环来遍历集合元素。
我们可以测试一下:
 
手动实现一个list集合,

class MyList<E>  implements Iterable<E> {
    private Object[] array = new Object[100] ;
    private int size = 0 ; // 表示数组的元素个数
    private int index = 0 ; // 表示遍历的数组下标
    public void add(E e) {
        array[size++] = e ;
    }
    @Override
    public Iterator<E> iterator() {
        return new Iterator<E>() {
            @Override
            public boolean hasNext() {
                try{
                    return index < size ? true : false;
                } finally {
                    if (index >= size) {
                        index = 0 ;
                    }
                }
            }
            @Override
            public E next() {
                return (E)array[index++];
            }
        };
    }
}

 
测试:

MyList<Integer> myList = new MyList<>() ;
        myList.add(1);myList.add(2);myList.add(3);myList.add(4);myList.add(5);
        for (Integer integer : myList) {
            System.out.println(integer);
        }

 
经测试证明打印myList的集合元素正确无误。
 
 

2.2 forEach循环

 
forEach循环的顶层原理也是迭代器,我们可以查看一下他的源码:

default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        Iterator var2 = this.iterator();

        while(var2.hasNext()) {
            T t = var2.next();
            action.accept(t);
        }

    }

我们可以发现,他的原理实际上也是调用了Iterator的Next(),来获取集合中的元素。
 

用法:

list.forEach(t -> {
            System.out.println(t);
        });

参数是一个函数式接口,需要给一个参数,参数表示集合中的某个元素element。
 
 

2.3 迭代器循环

 

直接获取list集合的iterator(), 根据hasNext() 判断是否有元素,根据next() 获取元素
上代码:

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

 
 
 
这四种方式,普通for循环的效率和性能是比较高的,因为如果使用迭代器,那么删除元素就只能采取iterator.remove() ,他在迭代过程中会进行数据锁定,效率稍低。普通for循环的操作较灵活。
 
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值