1

长话短说,我需要一个可以是不同类型(int、double、String、byte 等)的数组列表。现在问题是我已经让它与一个未指定的 ArrayList 对象一起工作,但是每次我从 ArrayList 检索一个数组时,我都会将它转换为我想要的数组类型,例如((double[]) arraylist.get(j))[i]然后做我必须做的事情。

但我担心的是:这是一个将迭代数百次的程序,我觉得这非常低效和缓慢。宁愿只有一个引用列表,而不是需要不断的转换。因此,任何关于替代方案的想法都将不胜感激。

4

2 回答 2

6

没有完成实际的转换,只是在运行时进行类型检查。如果您只需要每秒执行几百次,这应该不是什么大问题,尽管存储不相关的数据听起来好像您是从错误的角度解决问题(当然我可能是错的,但我无法想到需要或首选这样做的情况)。

于 2012-05-18T20:02:39.630 回答
2

正如所有其他人所说 - 没有转换 - 它只是一个演员。

但是如果你不想写这个演员表,你可以把它包装listarray在类中并提供一个方法:

public <T> T get(int indexOfArray, int indexInArray) {
    return (T) ((T[]) arraylist.get(indexOfArray))[indexInArray];
}

这样您就可以在代码中使用:

MyClassWithArrayList l = new MyClassWithArrayList(...);
...
double d = l.get(1, 2);

但当然你必须完全确定1索引处的数组是double类型的(会有强制转换异常)

或者如果你知道索引处总是会有一个双精度数组,1你可以写

public interface AppConstants {
    public static final int DOUBLE_TABLE_INDEX = 1;
    ...

并使用:

double d = l.get(AppConstants.DOUBLE_TABLE_INDEX, 2);
于 2012-05-18T20:10:24.640 回答