Java性能和内存:LinkedList&;阵列

Java性能和内存:LinkedList&;阵列,java,memory,performance,linked-list,Java,Memory,Performance,Linked List,我正在构建一个Android应用程序(所以机器资源有限),我想知道我应该对LinkedList有多挑剔 我知道数组是最轻的容器,在随机存取中是最好的,所以如果你只考虑性能,它们显然是理想的选择。然而,当你不知道你的名单会有多大时,他们的僵硬是一种痛苦 所以我的问题是:在有一个或多个不可预测大小列表的类中系统地使用以下类型的机制是否值得: public class unpredictable public Object[]realArray; private LinkedList<Objec

我正在构建一个Android应用程序(所以机器资源有限),我想知道我应该对LinkedList有多挑剔

我知道数组是最轻的容器,在随机存取中是最好的,所以如果你只考虑性能,它们显然是理想的选择。然而,当你不知道你的名单会有多大时,他们的僵硬是一种痛苦

所以我的问题是:在有一个或多个不可预测大小列表的类中系统地使用以下类型的机制是否值得:

public class unpredictable
public Object[]realArray;
private LinkedList<Object> temp;

//what using classes will call to add items
public void add(Object item) 
{
    temp.add( item );
}

//what the outer class calls when it knows there's nothing left to add 
public void doneAdding() 
{
    realArray = new Object[tmp.size()];
    transferAndRecycle();
}

private void transferAndRecycle()
{
    // copy items from linkedlist to array
}
公共类
公共对象[]realArray;
私有链接列表临时;
//使用类将调用什么来添加项
公共作废添加(对象项)
{
临时添加(项目);
}
//外部类在知道没有什么可添加时调用的
公共空间不可用()
{
realArray=新对象[tmp.size()];
转移周期();
}
私有无效循环()
{
//将项目从linkedlist复制到数组
}
所以我想我是在问,采取额外的步骤来消除Java的LinkedList对象占用的额外空间是否值得


有什么意见吗?谢谢

我认为您提供了很多ArrayList类已经包含的服务。ArrayList为您提供O(1)元素访问权限;对于链表,它是O(n)。ArrayList的底层机制是数组。您可以通过操纵容量来控制此阵列的大小

仔细看看ArrayList——您可能会避免重新发明一些轮子


另外一个想法:数组和泛型不能很好地发挥作用。ArrayList是这样做的。这是一个小问题,但对你来说可能很重要。

除了ncmathsadist已经说过的话之外:

您的选择还应取决于哪个操作更频繁:添加/删除元素还是直接访问单个元素。如果是前者,请使用LinkedList。如果是后者,请使用ArrayList

不要忘记:在调整数组大小时(无论是您自己的解决方案还是Java的ArrayList),有一个时间点分配了两倍的内存:一次用于“旧数组”,一次用于“新数组”,就在调整大小操作完成之前


因此,如果内存是您真正关心的问题,您也应该考虑。

与LinkedList相比,ArrayList具有更好的引用位置和更少的内存引用。一般来说,除非你需要一个特定的链接列表特性(中间的快速删除,拼接等)更喜欢ARARYLIST/

< P>如果你查看java文档,你可以找到类提供的方法,这些方法已经有了你想要的函数。例如,这是一个将arraylist转换为数组的函数


T[] toArray(T[]a)
按正确顺序返回包含此列表中所有元素的数组;返回的数组的运行时类型是指定数组的运行时类型。

它有过早优化的味道。我知道如何将集合转换为数组。。。再读一遍我的问题,你误解了。谢谢!在过去的2个学期里,我的教授们在我们的大脑中把链接表深深地打乱了,我今年夏天回到java时甚至没有考虑其他的事情。