我是Java的新手.
我必须在执行期间实现一个大小变化的对象数组.
我写的代码也将在Android上移植.
根据您的经验,实施该课程的最佳课程是什么?
谢谢,
丹
Dov*_*Dov 22
Java具有不足的模板功能.只要你想要一个对象数组,那就ArrayList<T>好了.对于原始人来说,这太糟糕了.
假设您有一个想要放入列表的对象层次结构,那么ArrayList理想情况是:
ArrayList<Vehicle> vehicles = new ArrayList<Vehicle>();
vehicles.add(new Car(...));
vehicles.add(new Truck(...));
Run Code Online (Sandbox Code Playgroud)
我假设在上面的例子中,Vehicle是基类,Car和Truck是子类.
另一方面,如果你想要一个数字列表,Java的效率非常低.每个对象都是一个12字节内存块的引用(实际上是一个4字节指针),加上你实际使用的内容.由于ArrayList不能应用于int,这意味着创建数字列表意味着:
因此,如果您正在操作大块的原始数据(int,float,double),那么在编写自己的ArrayList版本时可能是值得的.当数据很大且平台很小(如掌上电脑的东西)时,这一点尤其重要.
比较一下:
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 1000000; i++)
list.add(i):
Run Code Online (Sandbox Code Playgroud)
至:
public class IntArray {
private int[] data;
private int used;
private void grow() {
// implement code to make data double in size here...
}
public IntArray(int size) {
data = new int[size];
used = 0;
}
public void add(int i) {
if (i >= data.length) grow();
data[used++] = i;
}
}
IntArray list2 = new IntArray(1000000);
for (int i = 0; i < 1000000; i++)
list2.add(i);
Run Code Online (Sandbox Code Playgroud)
我最后一次对它进行基准测试时,原始列表的最佳使用速度比无可否认的ArrayList最佳使用速度快10倍.更公平地说,预先分配arraylist是合适的大小 - 它仍然慢.
如果要插入列表的开头或中间,LinkedList是值得的.如果通过添加到列表来构建列表,则ArrayList将完全控制LinkedList.因此,对于按顺序构建的典型对象列表,ArrayList就是您要寻找的.对于像int或double这样的基元的大型列表,请编写自己的列表.
Qui*_*son 11
你可能最感兴趣的是ArrayList.
我想甚至维基百科都有关于在java中使用通用列表的信息:http://en.wikipedia.org/wiki/Generics_in_Java
| 归档时间: |
|
| 查看次数: |
25321 次 |
| 最近记录: |