首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么时候泛型数组是绝对必要的??一个案例。

什么时候泛型数组是绝对必要的??一个案例。
EN

Stack Overflow用户
提问于 2015-05-13 14:13:54
回答 8查看 1.1K关注 0票数 25

这个Q是为了寻找一个绝对必要的泛型数组的样例。

泛型和数组“不要混合得很好”。

是否存在泛型ArrayList不能做的情况--泛型数组没有替代物,必须使用。

有效Java为泛型数组打开了一扇门,说在某些情况下可能需要泛型数组。

我一直在使用ArrayList,没有任何缺点,也想不出这样的情况。

蒂娅。

注:我见过这些:

还有一些其他的讨论。

EN

回答 8

Stack Overflow用户

发布于 2015-05-13 14:42:38

以下几点:

  • 如果您有一些“遗留”库,那么您将绑定到它们使用的类型。这可能是数组。
  • 如果您处理本机代码,那么数组将是与本机代码交换数据的一种更自然的方式。
  • 如果您访问二进制数据(例如声音文件或类似数据),那么使用数组可以有所帮助。
  • 如果您处理大量二进制数据,那么数组可能会更高效。

因此,数组可能有用的原因有很多(特别是对于原始类型)。

如果您只处理对象,那么使用List就更容易了。

票数 7
EN

Stack Overflow用户

发布于 2015-05-13 14:42:45

我要说的是,Bloch的意思是方便而不是必要,数组是更简单的结构,更易于处理。

作为一种数据结构,从功能的角度看,ArrayList与数组是可互换的。

数组显然需要更少的内存,但需要额外的努力才能获得一些基本功能(即,当原始数组不足以容纳新元素时手动调整数组大小),但其他函数已经由运行时(Arrays类)提供。

ArrayLists是由实际的Object数组支持的,因此对于搜索和排序等常见操作(在使用相同的算法时),性能上没有太大差异。

票数 6
EN

Stack Overflow用户

发布于 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[],并在必要时执行强制转换。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30217484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档