在这个问题中,如何在C 11中有效地选择标准库容器?是选择C集合时使用的方便流程图。
我认为对于那些不确定应该使用哪个集合的人来说,这是一个有用的资源,所以我试图找到一个类似的Java流程图,但没能做到。
有哪些资源和“备忘单”可以帮助人们在用Java编程时选择正确的集合?人们如何知道他们应该使用什么列表、集合和映射实现?
这里有更简单的图片。有意简化!
>
集合是任何包含称为“元素”(相同类型)的数据的东西。假设没有更具体的内容。
List是一个索引数据集合,其中每个元素都有一个索引。类似于数组,但更灵活。
列表中的数据保持插入顺序。
典型操作:获取第n个元素。
Set是一个元素包,每个元素只有一次(元素使用它们的equals()
方法进行区分。
数据集中的数据主要是为了知道有哪些数据。
典型操作:告诉列表中是否存在元素。
Map类似于List,但不是通过整数索引访问元素,而是通过它们的键(即任何对象)访问它们。就像PHP中的数组:)
Map中的数据可通过其键搜索。
典型操作:通过其ID获取元素(其中ID是任何类型的,而不仅仅是列表中的int)。
>
N、 B.标准库集确实是这样实现的:一个映射,其中键是集合元素本身,并且具有虚拟值。
列表与映射:在列表中,您可以通过其索引(列表中的位置)访问元素,而在映射中,您可以通过其键访问任何类型的操作系统(通常为:ID)
List与Set:在List中,元素受其位置的约束并且可以重复,而在Set中,元素只是“存在”(或不存在)并且是唯一的(在equals()
或compareTo()
的含义中,用于SortedSet
)
集合:一个接口,表示一个无序的项目“包”,称为“元素”。“下一个”元素未定义(随机)。
基本收藏图:
将元素的插入与数组列表和链接列表进行比较:
由于找不到类似的流程图,我决定自己制作一个。
这个流程图并没有试图涵盖诸如同步访问、线程安全等或遗留集合,但它确实涵盖了3个标准集、3个标准映射和2个标准列表。
此图像是为此答案创建的,并在知识共享署名4.0国际许可下获得许可。最简单的署名是链接到此问题或此答案。
其他资源
可能最有用的其他参考是oracle文档中描述每个集合的下一页。
哈希集与树集
这里详细讨论了何时使用HashSet或TreeSet:HashSet与TreeSet
ArrayList与LinkedList
详细讨论:何时使用LinkedList而不是ArrayList?
问题内容: 在这个问题中,如何在C 11中有效地选择标准库容器?是选择C 集合时要使用的便捷流程图。 我认为对于那些不确定应该使用哪个集合的人来说,这是一个有用的资源,因此我试图找到类似的Java流程图,但未能做到。 哪些资源和“备忘单”可用来帮助人们选择使用Java进行编程时使用的正确Collection?人们如何知道应该使用哪些List,Set和Map实现? 问题答案: 由于找不到相似的流程图
问题内容: 由于我没有收到对最后一个问题的肯定回答。我将尝试自己编写一个Java FTP上传小程序。 我的问题是:“您能推荐一个Java FTP客户端库供我使用吗?” 我希望它是: 稳定 能够处理被动和主动模式 能够提供上传进度信息 如果出了问题(尤其是上传不成功时),则引发可捕获的异常 便宜/免费使用,最好是开源的 我发现这个 概述了一些库,但由于这篇文章是从2003年,也许一些新的事态发展已经
问题内容: Java 8中有一整套日期类: ; ; ; ; ; 。 我已经忽略了他们的JavaDocs,并注意所有这些类都包含我需要的所有方法。因此,目前,我可以随机选择它们。但是我想为什么有6个单独的类并且每个类都专用于特定目的是有原因的。 技术信息和要求: 输入为,将转换为这些日期格式之一。 我不需要显示时区,但是当我比较两个日期时,能够正确比较纽约和巴黎的时间很重要。 精确的级别是秒,无需使
问题内容: 的(Java持久性API)规范有2名不同的方式来指定实体组合键:和。 我在映射的实体上同时使用了这两个注释,但是对于不太熟悉的人来说,这真是一个大麻烦。 我只想采用一种指定复合键的方法。哪个真的是最好的?为什么? 问题答案: 我认为这可能更冗长,因为无法使用任何字段访问运算符来访问整个主键对象。使用,您可以这样做: 这给构成组合键的字段提供了清晰的概念,因为它们都聚集在通过字段访问运算
问题内容: 按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我正在重写一个项目以使用Node.js。我想继续使用MySQL作为数据库(即使我不介意重写架构)。我正在寻找一种易于使用,性能合理的ORM,它支持缓存,多对一
问题内容: 从JavaDocs: 一的ConcurrentLinkedQueue是当许多线程共享访问一个共同的集合一个合适的选择。此队列不允许空元素。 ArrayBlockingQueue是一个经典的“有界缓冲区”,其中固定大小的数组保存由生产者插入并由消费者提取的元素。此类支持可选的公平性策略,用于订购正在等待的生产者和使用者线程 与基于阵列的队列相比,LinkedBlockingQueue通常