java中集合框架的需求是什么?

Java中的Collection框架需要什么,因为所有数据操作(排序/添加/删除)都可以使用Arrays,而且数组适合于内存消耗,并且与Collections相比性能也更好。

任何人都可以指出一个实时的数据导向示例,它显示了这些实现的两个(数组/集合)的差异。

  • 数组不可resize。
  • Java Collections Framework提供了许多不同的有用数据类型,例如链表(允许在恒定时间内任何位置插入),可resize的数组列表(如Vector但更酷),红黑树,基于哈希的映射(如Hashtable但更酷)。
  • Java Collections Framework提供了抽象,因此您可以将列表称为List ,无论是由数组列表还是链接列表支持; 并且您可以将地图/字典称为Map ,无论是由红黑树还是哈希表支持。

换句话说,Java Collections Framework允许您使用正确的数据结构,因为一个大小并不适合所有。

几个原因:

  • Java的集合类提供了比数组更高级别的接口。
  • 数组具有固定大小。 集合(请参阅ArrayList)具有灵活的大小。
  • 在原始arrays之上有效地实现复杂的数据结构(例如,散列表)是一项艰巨的任务。 标准的HashMap免费提供。
  • 对于同一组服务,您可以选择不同的实现:ArrayList与LinkedList,HashMap与TreeMap,同步等。
  • 最后,数组允许协方差:由于只能在运行时检测到的输入错误,因此无法保证设置数组元素。 generics可以防止数组中出现此问题。

看看这个说明协方差问题的片段:

  String[] strings = new String[10]; Object[] objects = strings; objects[0] = new Date(); // <- ArrayStoreException: java.util.Date 

Set,List和Map实现等集合类更接近“问题空间”。 它们允许开发人员更快地完成工作,并提供更易读/可维护的代码。

对于Collections API中的每个类,您的问题都有不同的答案。 这里有一些例子。

LinkedList:如果从数组中间删除元素,则需要支付将所有元素移动到已删除元素右侧的成本。 链表不是这样。

Set:如果您尝试使用数组实现集合,则添加元素或测试元素的存在是O(N)。 使用HashSet,它是O(1)。

映射:使用数组实现映射将提供与集合的假定数组实现相同的性能特征。

这取决于您的应用程序的需求。 collections品种类繁多,包括:

  • HashSet的
  • 数组列表
  • HashMap中
  • TreeSet中
  • TreeMap的
  • 链表

因此,例如,如果您需要存储键/值对,则必须编写大量自定义代码(如果它基于数组) – 而Hash *集合应该只是开箱即用。 一如既往,为工作选择合适的工具。

那么基本的前提是“错误的”,因为Java包含了Dictionary类,因为在语言中存在接口之前…

集合提供的列表有点类似于数组,但它们提供了许多其他的东西。 我假设你只是在谈论List(甚至是Set)并将Map留在其中。

是的,可以使用数组获得与List和Set相同的function,但是涉及很多工作。 图书馆的重点在于用户不必“自己动手”实现常见的东西。

一旦你有一个单独的实现,每个人都使用它更容易certificate花费资源优化它。 这意味着当标准集合加速或减少内存占用时,使用它们的所有应用程序都可以免费获得改进。

每个东西的单一界面也简化了每个开发人员的学习曲线 – 没有多种不同的方式来做同样的事情。

如果你想让一个数组随着时间的推移而增长,你可能不会将增长代码全部放在你的类上,而是编写一个实用程序方法来做到这一点。 删除和插入等相同…

此外,数组不太适合插入/删除,尤其是当您期望.length成员应该反映实际内容数量时,因此您将花费大量时间来增长和缩小数组。 数组也不太适合于集合,因为每次要进行插入以检查重复项时,都必须遍历整个数组。 这会杀死任何感知效率。

数组总是效率不高。 如果你需要像LinkedList这样的东西怎么办? 看起来你需要学习一些数据结构: http : //en.wikipedia.org/wiki/List_of_data_structures

集合是java中的框架,你知道框架很容易使用而不是实现然后使用它而你担心的是为什么我们不使用数组存在数组的缺点,就像它是静态的你必须定义行开头时的行大小,所以如果你的数组很大,那么主要是浪费大量内存。 所以你可以更喜欢它上面的ArrayList,它位于集合层次结构中。

复杂性是其他问题,比如你想要在数组中插入然后你必须跟踪它来定义索引所以你可以使用LinkedList所有函数只实现你需要使用并成为你的代码不那么复杂你可以阅读有各种优点集合层次结构

Java Collections提供了不同的function,可用性和便利性。

在应用程序中,我们想要处理一组对象,只有ARRAY无法帮助我们,或者更确切地说,它们可能会导致一些繁琐的操作。

一个重要的区别是可用性和便利性,特别是考虑到Collections在需要时自动扩展:

馆藏提出了简化我们工作的方法。

每个人都有一个独特的function:

  • List-本质上是一个可变大小的数组;
    您通常可以在任意位置添加/删除项目;
    项目的顺序是明确定义的(即您可以说明给定项目在列表中的位置)。

    使用 – 大多数情况下你只需要存储或迭代“一堆东西”然后迭代它们。

  • 设置 –事物可以“有或没有” – 当你向一个集合添加项目时,没有关于项目被添加多少次的概念,并且通常没有订购的概念。

    使用 –记住“您已经处理过哪些项目”,例如进行网络抓取时;
    对项目做出其他是 – 否决定,例如“项目是英语单词”,“是数据库中的项目吗?” ,“这个类别中的项目是?” 等等

在这里,您可以根据场景找到每个集合的用法: