我正试图在我的主Java文件中添加、删除和引用一个数组中的项目,但我很难弄清楚正确的语法。在ActionScript中,它们有push()和pop()来添加和删除数组中的项目,那么在Android中是否有相当的功能?
在Java中,数组具有固定的大小(初始化后),这意味着您无法向数组添加或删除项。
int[] i = new int[10];
上述代码片段意味着整数数组的长度为10。无法添加第11个整数,除非重新分配一个指向新数组的引用,例如以下操作:
int[] i = new int[11];
在Java中,包java.util包含了各种数据结构,可以处理类似数组的集合中添加和删除项目。经典的数据结构Stack具有push和pop方法。
对于那些没有时间重构代码以将数组替换为Collection
(例如ArrayList
)的人来说,有一种替代方法。与Collection
不同,数组的长度不能被改变,但是可以像这样替换数组:
array = push(array, item);
缺点是:
push
操作都需要复制整个数组,Object
原始数组未被更改,因此您必须根据需要更新变量。这里是 String
的push
方法:
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;
}
这种替代方法更加高效,代码更短但更难阅读:
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;
}
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;
}
}
用法:
String[] items = new String[]{"a", "b", "c"};
items = ArrayHelper.push(items, "d");
items = ArrayHelper.push(items, "e");
items = ArrayHelper.pop(items);
结果
原始: a,b,c
push调用后的数组: a,b,c,d,e
pop调用后的数组: a,b,c,d
Arrays.copyOf()
creates new array each time it's called. If you have to pop quite a long array in a loop, performance will be much worse than for (...) {String stringC = stringA + stringB}
- Farid您可以使用LinkedList。它具有peek、poll和offer方法。