Java中对Collection框架的需求是什么,因为所有数据操作(排序/添加/删除)都可以使用Arrays,而且数组适合于内存消耗,并且与Collections相比性能也更好。
有人能指出一个实时数据导向示例,它显示了这些实现的两个(数组/集合)的差异。
答案 0 :(得分:26)
Vector
但更酷),红黑树,基于哈希的映射(如Hashtable
但更酷)。List
,无论是由数组列表还是链接列表支持;并且您可以将地图/字典称为Map
,无论是由红黑树还是哈希表支持。换句话说,Java Collections Framework允许您使用正确的数据结构,因为一个大小并不适合所有。
答案 1 :(得分:6)
有几个原因:
看看这个说明协方差问题的片段:
String[] strings = new String[10];
Object[] objects = strings;
objects[0] = new Date(); // <- ArrayStoreException: java.util.Date
答案 2 :(得分:2)
Set,List和Map实现等集合类更接近“问题空间”。它们允许开发人员更快地完成工作,并提供更易读/可维护的代码。
答案 3 :(得分:1)
对于Collections API中的每个类,您的问题都有不同的答案。以下是一些例子。
LinkedList:如果从数组中间删除元素,则需要支付将所有元素移动到已删除元素右侧的成本。链表不是这样。
设置:如果您尝试使用数组实现集合,则添加元素或测试元素的存在是O(N)。使用HashSet,它是O(1)。
Map:使用数组实现映射会提供与set的推定数组实现相同的性能特征。
答案 4 :(得分:0)
这取决于您的应用程序的需求。收藏品种类繁多,包括:
因此,例如,如果您需要存储键/值对,则必须编写大量自定义代码(如果它基于数组) - 而Hash *集合应该只是开箱即用。一如既往,为工作挑选合适的工具。
答案 5 :(得分:0)
基本前提是“错误”,因为Java包含了Dictionary类,因为在语言中存在接口之前......
集合提供了与数组有些相似的列表,但它们提供了许多其他不相似的内容。我假设你只是在谈论List(甚至是Set)并将Map留在它之外。
是的,可以使用数组获得与List和Set相同的功能,但是涉及到很多工作。图书馆的重点在于用户不必“自己动手”实现常见的东西。
一旦你有一个单独的实现,每个人都使用它更容易证明花费资源优化它。这意味着当标准集合加速或减少内存占用时,使用它们的所有应用程序都可以免费获得改进。
每个东西的单个界面也简化了每个开发人员的学习曲线 - 没有多种不同的方法可以做同样的事情。
如果你想让一个数组随着时间的推移而增长你可能不会把增长代码全部放在你的类上,而是编写一个实用工具方法来做到这一点。删除和插入等同样......
此外,数组不太适合插入/删除,尤其是当您期望.length成员应该反映实际内容数时,因此您将花费大量时间来增长和缩小数组。数组也不太适合于集合,因为每次要进行插入以检查重复项时,必须遍历整个数组。这会扼杀任何感知效率。
答案 6 :(得分:0)
阵列总是效率不高。如果您需要LinkedList
之类的内容怎么办?您似乎需要了解一些数据结构:http://en.wikipedia.org/wiki/List_of_data_structures
答案 7 :(得分:0)
Collection是Java中的框架,你知道框架很容易使用而不是实现然后使用它而你担心的是为什么我们不使用数组存在数组的缺点就像它是静态的你有至少在开始时定义行的大小,所以如果你的数组很大,那么主要是浪费大量内存。 所以你可以更喜欢它上面的ArrayList。
复杂性是另一个问题,比如你想要在数组中插入然后你必须跟踪它以定义索引所以在它上面你可以使用LinkedList所有函数只有你需要使用并且变得你的代码不那么复杂你可以在那里阅读是集合层次的各种优点。
答案 8 :(得分:0)
Java Collections 提供了不同的功能,可用性和便利性。
在应用程序中,我们想要处理一组对象,只有ARRAY无法帮助我们,或者更确切地说,它们可能导致一些繁琐的操作。
一个重要的区别是可用性和便利性,特别是考虑到Collections在需要时会自动扩展:
馆藏提出了简化工作的方法。
每个人都有一个独特的功能:
列表 - 基本上是一个可变大小的数组;
您通常可以在任意位置添加/删除项目;
项目的顺序是明确定义的(即您可以说明给定项目在列表中的位置)。
已使用 - 大多数情况下您只需要存储或迭代一堆东西&#34;然后迭代它们。
设置 - 事情可以是&#34;有没有&#34; - 当您向一个集添加项目时,没有概念该项目的次数被添加了,通常没有订购的概念。
已使用 - 记住&#34;您已处理过哪些项目&#34;,例如进行网络爬行时;
做出其他肯定 - 没有关于某个项目的决定,例如&#34;项目是英语单词&#34;,&#34;是数据库中的项目?&#34; ,&#34;是此类别中的项目?&#34;等
在这里您可以找到每个collection as per scenario:
的用法答案 9 :(得分:0)
集合框架具有更高的级别,并且提供了重要的接口和类,通过使用它们,我们可以使用许多复杂的方法来管理对象组,这些对象已经由数组给出了许多方法特定收藏。
例如:
要了解有关Java集合的更多信息,请check out this article。