删除args []中用于Java命令行界面的连续第0个条目?

Bil*_* IV 0 java arrays arraylist args

我记得在某处看到一个示例,该示例通过删除最低编号的值来逐步遍历String args []

public static void main( String args[]) {
    while (args.length > 0 ) {
    // do something and obliterate elements from args[]
    }
}
Run Code Online (Sandbox Code Playgroud)

显然,可以通过跟踪args中的当前位置并将其与args.length进行比较来实现;或由args []的内容制成的ArrayList,带有argsAL.size()。我想不起来ArrayList示例了吗?我知道这是一个边缘性问题,可能的答案是:“不,没有,也不应该有!”。也许我太专注了...

法案

Mar*_*ers 5

不,没有,也不应该有!从阵列的前面删除将是不必要的昂贵方法。

您可能会想到许多脚本语言都有一个shift运算符来使下一个元素(perl,bash等)出队。

编辑:仅出于后代考虑,这是Queue的一个非常简单的实现,它将允许您“伪造”相同的功能(即封装光标):

class ArrayQueue<E> extends AbstractQueue<E> {

    private int cursor = 0;
    private final E[] data;

    public ArrayQueue(E[] data) {
        this.data = data;
    }

    private boolean inRange() {
        return cursor < data.length;
    }

    @Override
    public E peek() {
        return inRange() ? data[cursor] : null;
    }

    @Override
    public E poll() {
        return inRange() ? data[cursor++] : null;
    }

    @Override
    public boolean offer(E e) {
        throw new UnsupportedOperationException();
    }

    @Override
    public void clear() {
        cursor = data.length;
    }

    @Override
    public Iterator<E> iterator() {
        //ommitted for brevity
    }

    @Override
    public int size() {
        return data.length - cursor;
    }

}
Run Code Online (Sandbox Code Playgroud)

用法:

public static void main(String[] args) throws Exception {
    Queue<String> argQ = new ArrayQueue<String>(args);
    String command = argQ.poll();
    String target = argQ.poll();
}
Run Code Online (Sandbox Code Playgroud)

警告:未经测试