You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中是否有等价于JavaScript shift()的ArrayList操作函数?

Java ArrayList是否有类似JavaScript数组shift()的方法?

我正在参考一个JavaScript项目编写Java函数,该函数与其他辅助函数配合,用于将SDP转换为XML。以下是相关JavaScript代码:

parseRTCPFB(line) {
    const parts = line.substr(10).split(' ');
    const data = {};

    data.pt = parts.shift();
    data.type = parts.shift();
    data.params = parts;

    return data;
}

在上述代码片段中,parts是一个数组,使用了shift()方法。据我理解,shift()方法会取出并返回数组的首个元素。请问Java的ArrayList是否有类似功能的函数?


有的,Java里的ArrayList可以用remove(0)方法实现和JSshift()完全一致的效果:

  • remove(0)会删除并返回列表的第一个元素,同时将后续所有元素向前移动一位,逻辑和JS的shift()完全匹配。

不过要注意,ArrayList的remove(0)操作时间复杂度为O(n),因为每次都要移动后续元素。如果你的场景需要频繁执行首元素移除操作,更推荐使用LinkedList,它的removeFirst()(或者poll(),后者在列表为空时返回null而非抛出异常)方法效率更高,时间复杂度是O(1)。

用ArrayList实现对应逻辑的示例代码:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class SdpParser {
    public static Map<String, Object> parseRTCPFB(String line) {
        ArrayList<String> parts = new ArrayList<>(Arrays.asList(line.substring(10).split(" ")));
        Map<String, Object> data = new HashMap<>();

        data.put("pt", parts.remove(0));
        data.put("type", parts.remove(0));
        data.put("params", parts);

        return data;
    }
}

用LinkedList优化的示例代码:

import java.util.LinkedList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class SdpParser {
    public static Map<String, Object> parseRTCPFB(String line) {
        LinkedList<String> parts = new LinkedList<>(Arrays.asList(line.substring(10).split(" ")));
        Map<String, Object> data = new HashMap<>();

        data.put("pt", parts.removeFirst()); // 或者用parts.poll()避免空列表异常
        data.put("type", parts.removeFirst());
        data.put("params", parts);

        return data;
    }
}

内容的提问来源于stack exchange,提问作者Vedant Barve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:52:46