Java 中初始化 List 集合的 8 种方式!

List 是在开发中比较常用的集合,今天总结一下 Java 中初始化 List 的几种方式。

1、常规方式

List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
System.out.println("getList1: " + list);

输出

getList1: [1, 2, 3]

2、Arrays 工具类

// 生成的list不可变
List<String> list = Arrays.asList("1", "2", "3");
System.out.println("getList2: " + list);
// 如果要可变需要用ArrayList包装一下
List<String> numbers = new ArrayList<>(Arrays.asList("1", "2", "3"));
numbers.add("4");
System.out.println("numbers: " + numbers);

输出

getList2: [1, 2, 3]
numbers: [1, 2, 3, 4]

3、Collections 工具类

// 生成的list不可变
List<String> list = Collections.nCopies(3, "1");
System.out.println("getList3: " + list);
// 如果要可变需要用ArrayList包装一下
List<String> dogs = new ArrayList<>(Collections.nCopies(3, "dog"));
dogs.add("dog");
System.out.println("dogs: " + dogs);

输出

getList3: [1, 1, 1]
dogs: [dog, dog, dog, dog]

4、Lists 工具类

List<String> list = Lists.newArrayList("1", "2", "3");
System.out.println("getList4: " + list);

输出

getList4: [1, 2, 3]

5、匿名内部类

List<String> list = new ArrayList<String>() {{
     add("1");
     add("2");
     add("3");
}};
System.out.println("getList5: " + list);

输出

getList5: [1, 2, 3]

该方法用了双弧号语法,可以参考双大括号初始化的理解和使用

6、ImmutableList

List<String> list = ImmutableList.of("1", "2", "3");
System.out.println("getList6: " + list);

输出

getList6: [1, 2, 3]

7、Java8 Stream

List<String> list = Stream.of("1", "2", "3").collect(Collectors.toList());
System.out.println("getList7: " + list);

输出

getList7: [1, 2, 3]

8、Java9 List.of

List<String> list = List.of{"1", "2", "3"};
System.out.println("getList8: " + list);

输出

getList8: [1, 2, 3]

参考:Java 中初始化 List 集合的 6 种方式!

  • 36
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用 FFmpeg 进行音视频编解码时,需要注册相应的编解码器。可以通过 avcodec_register_all() 函数来注册 FFmpeg 所有已经实现的编解码器。 具体步骤如下: 1. 引入头文件 ```c #include <libavcodec/avcodec.h> ``` 2. 注册编解码器 ```c avcodec_register_all(); ``` 3. 查找编解码器 在注册编解码器后,可以通过调用 avcodec_find_encoder() 或 avcodec_find_decoder() 函数来查找特定的编解码器。 例如,查找 H.264 编码器: ```c AVCodec *codec = avcodec_find_encoder(AV_CODEC_ID_H264); if (!codec) { // 没有找到 H.264 编码器 return -1; } ``` 4. 打开编解码器 在找到所需的编解码器后,可以通过调用 avcodec_open2() 函数来打开编解码器。该函数会分配一个 AVCodecContext 结构体,用于存储编解码器相关的信息。 例如,打开 H.264 编码器: ```c AVCodec *codec = avcodec_find_encoder(AV_CODEC_ID_H264); if (!codec) { // 没有找到 H.264 编码器 return -1; } AVCodecContext *codec_ctx = avcodec_alloc_context3(codec); if (!codec_ctx) { // 分配 AVCodecContext 失败 return -1; } // 设置编码参数 codec_ctx->width = width; codec_ctx->height = height; codec_ctx->time_base = (AVRational){1, fps}; codec_ctx->framerate = (AVRational){fps, 1}; // 打开编码器 if (avcodec_open2(codec_ctx, codec, NULL) < 0) { // 打开编码器失败 avcodec_free_context(&codec_ctx); return -1; } ``` 5. 使用编解码器 打开编码器后,就可以使用它进行音视频编解码了。对于编码器,可以通过调用 avcodec_send_frame() 函数发送待编码的帧,然后调用 avcodec_receive_packet() 函数获取编码后的数据包。 例如,使用 H.264 编码器进行视频编码: ```c AVPacket pkt = {0}; // 发送帧 if (avcodec_send_frame(codec_ctx, frame) < 0) { // 发送帧失败 return -1; } // 获取编码后的数据包 while (avcodec_receive_packet(codec_ctx, &pkt) == 0) { // 处理数据包 ... // 释放数据包内存 av_packet_unref(&pkt); } ``` 对于解码器,可以通过调用 avcodec_send_packet() 函数发送待解码的数据包,然后调用 avcodec_receive_frame() 函数获取解码后的帧。 例如,使用 H.264 解码器进行视频解码: ```c AVFrame *frame = av_frame_alloc(); // 发送数据包 if (avcodec_send_packet(codec_ctx, &pkt) < 0) { // 发送数据包失败 return -1; } // 获取解码后的帧 while (avcodec_receive_frame(codec_ctx, frame) == 0) { // 处理帧 ... } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值