Android 项目数量未知的数组
Android arrays of unknown number of items
如果我不知道数组会有多少项,我可以这样做吗
long[] longarray = new long[99];
然后
longarray[0] = 11;
longarray[1] = 22;
longarray[2] = 33;
?所以,我估计将由大约 5 到 60 个项目创建。
99项的声明是否占用大量内存?
我的答案:
long[] longarray = new long[1];
long[] temparray;
int cnt = -1;
int cntp;
...
public void myAdd(long value) {
cnt++;
cntp = cnt + 1;
if (cnt == 0) { longarray[0] = value } //the first time
else {
temparray = new long[cnt];
System.arraycopy(longarray, 0, temparray, 0, cnt);
longarray = new long[cntp];
System.arraycopy(temparray, 0, longarray, 0, cnt);
longarray[cnt] = value;
}
}
这基本上就是 listarray add() 所做的。
使用列表。 Java 中最常见的内置列表是 ArrayList
和 LinkedList
:
List<Long> longlist = new ArrayList<Long>;
longlist.add(11);
longlist.add(22);
longlist.add(33);
等使用 longlist.get(i)
检索值,其中 i
是您的索引。
一个long在内存中占用8字节,所以一个99长的数组需要(99 * 8)字节+几个字节的开销。
说是否很多取决于您的用例,但对于大多数系统来说并不多。
但这确实不是一个好的做法,如果您没有充分的理由不这样做,您确实应该使用列表。他们像冠军一样处理动态分配。
如果您有理由不使用列表,请告诉我们。
如果我不知道数组会有多少项,我可以这样做吗
long[] longarray = new long[99];
然后
longarray[0] = 11;
longarray[1] = 22;
longarray[2] = 33;
?所以,我估计将由大约 5 到 60 个项目创建。
99项的声明是否占用大量内存?
我的答案:
long[] longarray = new long[1];
long[] temparray;
int cnt = -1;
int cntp;
...
public void myAdd(long value) {
cnt++;
cntp = cnt + 1;
if (cnt == 0) { longarray[0] = value } //the first time
else {
temparray = new long[cnt];
System.arraycopy(longarray, 0, temparray, 0, cnt);
longarray = new long[cntp];
System.arraycopy(temparray, 0, longarray, 0, cnt);
longarray[cnt] = value;
}
}
这基本上就是 listarray add() 所做的。
使用列表。 Java 中最常见的内置列表是 ArrayList
和 LinkedList
:
List<Long> longlist = new ArrayList<Long>;
longlist.add(11);
longlist.add(22);
longlist.add(33);
等使用 longlist.get(i)
检索值,其中 i
是您的索引。
一个long在内存中占用8字节,所以一个99长的数组需要(99 * 8)字节+几个字节的开销。 说是否很多取决于您的用例,但对于大多数系统来说并不多。
但这确实不是一个好的做法,如果您没有充分的理由不这样做,您确实应该使用列表。他们像冠军一样处理动态分配。
如果您有理由不使用列表,请告诉我们。