相当于数组的push()或pop()?

cla*_*n33 67 java android

我试图添加,删除和引用我在我的主java文件中创建的数组中的项目,但我无法找出正确的语法.在actionscript中,他们有push()和pop()来添加和删除数组中的项目,在android中是否有相同的东西?

Ken*_*net 31

在Java中,数组具有固定大小(在初始化之后),这意味着您无法在数组中添加或删除项.

int[] i = new int[10];
Run Code Online (Sandbox Code Playgroud)

上面的代码片段表示整数数组的长度为10.不可能添加第十一个整数,而不重新分配对新数组的引用,如下所示:

int[] i = new int[11];
Run Code Online (Sandbox Code Playgroud)

在Java中,java.util包包含各种数据结构,可以处理从类似数组的集合中添加和删除项目.经典的数据结构Stack有push和pop的方法.

  • 但是请记住,Stack不是一个类的优秀,因为它继承自Vector,因此是完全同步的.因此,除非您需要同步,否则ArrayList或LinkedList可能是更好的选择. (8认同)

Eby*_*Eby 20

使用数组列表 http://developer.android.com/reference/java/util/ArrayList.html

  • 不知道为什么这是公认的答案.正确的答案是java.util.ArrayDeque或java.util.LinkedList (36认同)

Bry*_*eld 17

对于那些没有时间重构代码以用Collections 替换数组的人(例如ArrayList),有一种替代方案.与Collections 不同,数组的长度不能更改,但可以替换数组,如下所示:

array = push(array, item);
Run Code Online (Sandbox Code Playgroud)

缺点是

  • 每次推动时都必须复制整个数组,并且
  • 原始数组Object未更改,因此您必须根据需要更新变量.

以下是push方法String:(
您可以创建多个push方法,一个用于String,一个用于int等)

private static String[] push(String[] array, String push) {
    String[] longer = new String[array.length + 1];
    for (int i = 0; i < array.length; i++)
        longer[i] = array[i];
    longer[array.length] = push;
    return longer;
}
Run Code Online (Sandbox Code Playgroud)

这种替代方案更有效,更短,更难阅读:

private static String[] push(String[] array, String push) {
    String[] longer = new String[array.length + 1];
    System.arraycopy(array, 0, longer, 0, array.length);
    longer[array.length] = push;
    return longer;
}
Run Code Online (Sandbox Code Playgroud)

  • 我强烈反对使用这种方法.对于非常简单和小的数组,它不会产生问题,但对于中型或重型数组,这将导致系统在每次添加项时迭代数组.如果您有100多个项目数组并且想要添加更多3个项目,它将执行303个操作. (10认同)

zaw*_*tut 7

您可以使用LinkedList.它有方法偷看,民意调查和提供.


Chr*_*ell 5

您可以Arrays.copyOf()稍加思考就可以使用它来创建一个不错的辅助函数。

public class ArrayHelper {
    public static <T> T[] push(T[] arr, T item) {
        T[] tmp = Arrays.copyOf(arr, arr.length + 1);
        tmp[tmp.length - 1] = item;
        return tmp;
    }

    public static <T> T[] pop(T[] arr) {
        T[] tmp = Arrays.copyOf(arr, arr.length - 1);
        return tmp;
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

String[] items = new String[]{"a", "b", "c"};

items = ArrayHelper.push(items, "d");
items = ArrayHelper.push(items, "e");

items = ArrayHelper.pop(items);
Run Code Online (Sandbox Code Playgroud)

结果

原稿: a,b,c

推送调用后的数组: a,b,c,d,e

弹出呼叫后的数组: a,b,c,d