黑马程序员_foreach循环

 -------  android培训 java培训 、期待与您交流! ----------
foreach循环:
   集合中的元素虽然可以用Iterator进行遍历,但是写法上比较繁琐,为了简化书写,从JDK5.0开始,提供了foreach循环.foreach循环是一种更加简洁的for循环,也称为增强for.foreach循环用于遍历集合或数组中的元素,格式是:
            for (容器中元素类型 临时变量 : 容器变量) {
                执行语句
            }
   从上面的格式可以看出,与for循环相比,foreach循环不需要获得集合或数组的长度,也不需要根据索引访问容器中的元素,但它会自动遍历容器中的每个元素,例如:
package com.itheima;

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        //创建ArrayList对象
        ArrayList al = new ArrayList();
        //向ArrayList中添加字符串元素
        al.add("hello");
        al.add("java");
        al.add("heima");
        //使用for循环遍历该集合
        for (Object obj : al) {
            //输出打印集合中的元素
            System.out.println(obj);
        }
    }
}
其运行结果为:
        
   通过这个例子可以看出,foreach循环在遍历集合是语法非常简洁,没有循环条件,也没有迭代语句,所有这些工作都交给虚拟机去执行了.foreach循环的次数是有容器中元素的个数决定的,每次循环时,foreach中都通过变量间当前循环的元素记住,从而将集合中的元素打印出来.
注意:
   1.foreach循环虽然书写比较简洁,但在使用上也有一定的局限性.当使用foreach循环遍历集合和数组时,只能访问集合中的元素,不能对其中的元素进行修改.例如:

运行结果为:

   例子中分别使用foreach循环和普通for循环去修改数组中的元素.从运行结果可以看出foreach循环并不能修改数组中元素的值.其原因是第10行代码中的str="Android"只是将临时变量str指向了一个新的字符串,这和数组中的元素没有一点关系,而普通for循环中,是可以通过索引的方式来引用数组中的元素并将其进行修改的.
   2.在使用Iterator迭代器对集合中的元素进行迭代时,如果调用了集合对象的remove()方法去删除元素,会出现异常,例如:

   这个代码在运行是会出现异常ConcurrentModificationException..这个异常是迭代器对象抛出的,出现异常的原因是集合中删除了元素会导致迭代器预期的迭代次数发生改变,导致迭代器的结果不正确.
   为了解决上述问题,可以使用迭代器本身的删除方法,将上述例子的第16行代码替换成it.remove()即可解决这个问题,其代码如下:

其运行结果如下:

   从运行结果可以看出,字符串"hello"确实被删除了.并且没有出现异常现象.因此可以得出结论,调用迭代器对象的remove()方法删除元素所导致的迭代此时变化,对于迭代器本身来讲是可以预知的.
 ------- android培训java培训、期待与您交流! ----------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`gst_structure_foreach` 是 GStreamer 中的一个函数,用于遍历 `GstStructure` 中的字段和值。 `GstStructure` 是 GStreamer 中的一个数据结构,用于表示媒体流的元数据。每个 `GstStructure` 包含多个字段,可以通过字段名来访问和操作这些值。 `gst_structure_foreach` 的函数签名如下: ```c void gst_structure_foreach(GstStructure *structure, GstStructureForeachFunc func, gpointer user_data); ``` 参数说明: - `structure`:要遍历的 `GstStructure` - `func`:用于处理每个字段和值的回调函数 - `user_data`:传递给回调函数的用户数据指针 回调函数的定义如下: ```c void (*GstStructureForeachFunc) (const gchar *name, const GValue *value, gpointer user_data); ``` 回调函数有三个参数: - `name`:当前字段的名称 - `value`:当前字段对应的值 - `user_data`:传递给 `gst_structure_foreach` 的用户数据指针 使用 `gst_structure_foreach` 函数,我们可以遍历 `GstStructure` 中的所有字段和值,对它们进行处理。下面是一个示例代码: ```c static void print_field(const gchar *name, const GValue *value, gpointer user_data) { g_print("Field: %s\n", name); // 对当前字段和值进行处理 } // 在某个地方调用 gst_structure_foreach GstStructure *structure = gst_structure_new("my_structure", "field1", G_TYPE_INT, 10, "field2", G_TYPE_STRING, "Hello", NULL); gst_structure_foreach(structure, (GstStructureForeachFunc)print_field, NULL); ``` 在上面的示例中,我们创建了一个名为 "my_structure" 的 `GstStructure`,其中包含两个字段 "field1" 和 "field2"。然后,我们使用 `gst_structure_foreach` 遍历该结构,并将每个字段和值传递给 `print_field` 回调函数进行处理。在回调函数中,我们简单地打印出字段的名称。 通过使用 `gst_structure_foreach`,我们可以方便地遍历 `GstStructure` 中的字段和值,并对它们进行相应的操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值