对List的遍历有三种方式

本文介绍了Java中遍历List的三种常见方法:迭代器、增强for循环和普通for循环,并对比了它们的性能特点及适用场景。迭代器在删除元素时较为安全,但效率较低;增强for循环内部调用迭代器,灵活性受限;普通for循环效率最高,但需注意多线程环境下的并发问题。

对List的遍历有三种方式   
    
   List<String>    list    =    new    ArrayList<String>();   
   list.add("testone");   
   list.add(“testtwo”);   
   ...   
    
   第一种:   
   for(Iterator<String>    it    =    list.iterator();    it.hasNext();    )    {   
       ....   
   }   
   这种方式在循环
执行过程中会进行数据锁定,    性能稍差,    同时,如果你想在寻欢过程中去掉某个元素,只能调用it.remove方法,    不能使用list.remove方法,    否则一定出现并发访问的错误.   

    
   第二种:   
   for(String   data    :    list)    {   
       .....   
   }   
   内部调用第一种,    换汤不换药,  因此比Iterator 慢,这种循环方式还有其他限制, 不建议使用它。
    
   第三种:   
   for(int    i=0;    i<list.size();    i++)    {   
       A    a    =    list.get(i);   
       ...   
   }   
   内部不锁定,    效率最高,    但是当写多线程时要考虑并发操作的问题。
在Java中,遍历目录下的文件可以使用以下三种方式: 1. File类的listFiles()方法 使用File类的listFiles()方法可以获取目录下的所有文件和子目录,返回一个File数组。我们可以遍历这个File数组,对于每一个文件,判断它是不是目录,如果是目录则递归调用listFiles()方法,否则就处理这个文件。 示例代码: ``` public static void listFiles(File dir) { File[] files = dir.listFiles(); for (File file : files) { if (file.isDirectory()) { listFiles(file); } else { // 处理文件 } } } ``` 2. Files类的walk()方法 Java 8引入了Files类,它提供了一些新的方法来处理文件系统中的文件。其中,walk()方法可以遍历目录下的所有文件和子目录,返回一个Stream<Path>对象。我们可以通过Stream的forEach()方法遍历所有的Path,对于每一个Path,判断它是不是目录,如果是目录则递归调用walk()方法,否则就处理这个文件。 示例代码: ``` public static void walkFiles(Path dir) throws IOException { Files.walk(dir) .filter(Files::isRegularFile) .forEach(file -> { // 处理文件 }); } ``` 3. Apache Commons IO库的FileUtils类 Apache Commons IO库是一个常用的Java工具库,它提供了大量的文件和流操作工具类。其中,FileUtils类提供了一个listFiles()方法,可以遍历目录下的所有文件和子目录,返回一个File数组。我们可以遍历这个File数组,对于每一个文件,判断它是不是目录,如果是目录则递归调用listFiles()方法,否则就处理这个文件。 示例代码: ``` public static void listFiles(File dir) { Collection<File> files = FileUtils.listFiles(dir, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE); for (File file : files) { if (file.isDirectory()) { listFiles(file); } else { // 处理文件 } } } ``` 总的来说,以上三种方式都可以用来遍历目录下的文件,具体使用哪一种方式可以根据实际情况来选择。其中,Files类的walk()方法可以使用Lambda表达式来处理文件,代码更加简洁。Apache Commons IO库的FileUtils类提供了很多常用的文件操作方法,也可以方便地遍历目录下的文件。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值