我一直只是一个人使用:
List<String> names = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
我使用接口作为可移植性的类型名称,因此当我问这些问题时,我可以重新编写代码.
何时应该LinkedList使用,ArrayList反之亦然?
我正在研究Java 8文档ArrayList.我得到的最大数组大小定义为Integer.MAX_VALUE - 8平均值2 ^ 31 - 8 = 2 147 483 639.然后,我的重点是,为什么8减去或why not less than 8或more than 8减去?
/**
* The maximum size of array to allocate.
* Some VMs reserve some header words in an array.
* Attempts to allocate larger arrays may result in
* OutOfMemoryError: Requested array size exceeds VM limit
*/
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
Run Code Online (Sandbox Code Playgroud)
我得到了一些相关的答案,但没有实现我的目标.
有些人根据文档给出了一些逻辑"Some …
例如,ArrayListJava中的s的大小调整系数为2。当ArrayList包裹的数组空间不足时,该数组的所有元素都将转移到新数组,该数组的大小是原始数组的2倍。
由于Python列表/数组自然是动态的,因此它们的大小调整因素是什么?还是他们使用其他缩放方法?如果是这样,那是什么方法?它的渐近运行时是什么(大O)?
python list asymptotic-complexity data-structures python-3.x
运行此代码:
n = 5;
x = zeros(n, 1);
for ix=1:10
x(ix) = rand();
disp(getfield(whos('x'), 'bytes'))
end
Run Code Online (Sandbox Code Playgroud)
输出:
40
40
40
40
40
48
56
64
72
80
Run Code Online (Sandbox Code Playgroud)
这似乎表明,当Matlab调整矢量大小时,它会调整大小以使其具有所需的空间,而不是更多.所以,一次只有一个元素.
将此与Sun的Java Array实现中的方法进行对比,后者分配了足够的空间,以便每次调整都不需要在初始边界之上的每个赋值上进行.显然,由于Matlab不是开源的,所以没有办法告诉100%他们做了什么,但有没有更好的方法来了解调整大小是如何完成的?上面的代码不是估计这个的好方法吗?
假设我ArrayList在Java中添加了N个项目.最坏情况下的运行时间是多少?我知道添加单个项目可能是O(N),因为数组可能需要调整大小.它不会调整N次,因为我添加N个项目甚至是因子N因为(AFAIK)ArrayList每次调整大小时容量增加一些因素.这意味着某种log(N)数量的调整大小.所以看起来应该是O(N log(N))来插入N个项目,但我对此并不完全确定.我正在看的旧计算机科学考试的答案为O(N ^ 2).我错过了什么吗?
int newCapacity = (oldCapacity * 3)/2 + 1;(从这个答案)
我在Java中遇到了关于arraylist的这个采访问题,我觉得它很有意思,但不知道如何回答它:
What attention should be paid when using arrayList to store large object?
Run Code Online (Sandbox Code Playgroud)
我想知道我们是否应该在时间/空间复杂性方面回答这个问题?
谢谢
java ×4
arraylist ×3
arrays ×1
big-o ×1
collections ×1
linked-list ×1
list ×1
matlab ×1
matrix ×1
python ×1
python-3.x ×1