这个Q是为了寻找一个绝对必要的泛型数组的样例。
泛型和数组“不要混合得很好”。
是否存在泛型ArrayList不能做的情况--泛型数组没有替代物,必须使用。
有效Java为泛型数组打开了一扇门,说在某些情况下可能需要泛型数组。
我一直在使用ArrayList,没有任何缺点,也想不出这样的情况。
蒂娅。
注:我见过这些:
还有一些其他的讨论。
发布于 2015-05-13 14:42:38
以下几点:
因此,数组可能有用的原因有很多(特别是对于原始类型)。
如果您只处理对象,那么使用List就更容易了。
发布于 2015-05-13 14:42:45
我要说的是,Bloch的意思是方便而不是必要,数组是更简单的结构,更易于处理。
作为一种数据结构,从功能的角度看,ArrayList与数组是可互换的。
数组显然需要更少的内存,但需要额外的努力才能获得一些基本功能(即,当原始数组不足以容纳新元素时手动调整数组大小),但其他函数已经由运行时(Arrays类)提供。
ArrayLists是由实际的Object数组支持的,因此对于搜索和排序等常见操作(在使用相同的算法时),性能上没有太大差异。
发布于 2015-05-13 14:43:00
一些松散的想法:
array是一种基本数据类型,在任何命令式语言(可能是变相形式)中都是必需的。没有array,我们如何实现ArrayList?)
然而,我们可以将array伪装成“正常”类型。对于实例,我们可以引入一个执行数组操作的内部lang.lang.Array<E>类型,并在Java中消除当前的array类型。(忽略原始数组,这是另一个主题)。一切都会好起来的。
然而,我们没有奢侈的“改进”和“清洁”语言的方式打破了向后兼容性。
在引入仿制药之前,array可以被看作是穷人的仿制药。我们不能表达ArrayList<String>,但我们可以做String[]。这就是为什么许多旧的API返回数组,而不是某些集合类型,因为数组更具有类型安全性。array甚至是协变体.说大也大吧。
在引入泛型之后,array的用例变得少得多。通常,您应该避免在公共API中使用数组。(当然,除了var-arg foo(Bar...),它是罩下的数组)
但是在实现代码中,我们仍然需要array,它是构建更加复杂的数据结构的基本数据结构。为此目的,在许多情况下,ArrayList显然更臃肿。
现在的问题是,要实现像ArrayList<E>这样的东西,我们应该在内部使用E[]还是Object[]?由于擦除,E[]更麻烦--正如俗话说的“泛型和数组不能很好地混合”。因此,忘记它,只需使用Object[],并在必要时执行强制转换。
https://stackoverflow.com/questions/30217484
复制相似问题