我应该使用哪个Java集合? 这个问题是一个使用C++的集合时使用的方便流程图。
我认为对于那些不确定应该使用哪个集合的人来说,这是一个有用的资源,所以我试图为Java找到一个类似的流程图,但未能做到这一点我应该使用哪个Java集合? 这个问题是一个使用C++的集合时使用的方便流程图。,java,algorithm,arraylist,collections,hashmap,Java,Algorithm,Arraylist,Collections,Hashmap,我认为对于那些不确定应该使用哪个集合的人来说,这是一个有用的资源,所以我试图为Java找到一个类似的流程图,但未能做到这一点 有哪些资源和“备忘单”可以帮助人们在使用Java编程时选择正确的集合?人们如何知道他们应该使用什么列表、集合和映射实现?因为我找不到类似的流程图,所以我决定自己制作一个 此流程图不尝试涵盖同步访问、线程安全等内容或遗留集合,但它确实涵盖了3个标准集合s、3个标准映射s和2个标准列表s 此图像是为此答案创建的,并根据最简单的属性授权,即通过链接到此问题或此答案 其他资源
有哪些资源和“备忘单”可以帮助人们在使用Java编程时选择正确的集合?人们如何知道他们应该使用什么列表、集合和映射实现?因为我找不到类似的流程图,所以我决定自己制作一个 此流程图不尝试涵盖同步访问、线程安全等内容或遗留集合,但它确实涵盖了3个标准集合s、3个标准映射s和2个标准列表s 此图像是为此答案创建的,并根据最简单的属性授权,即通过链接到此问题或此答案 其他资源 可能最有用的其他参考是oracle文档中的下一页,该页描述了每种参考 哈希集与树集 这里详细讨论了何时使用
HashSet
或TreeSet
:
ArrayList vs LinkedList
详细讨论:这里有更简单的图片。故意简化
equals()
方法区分元素)
存储集合中的数据主要是为了知道有哪些数据
典型操作:告诉列表中是否存在元素
int
)
- Set vs.Map:在Set中,您可以自己搜索数据,而在Map中,您可以按键搜索数据 注意:标准库集合实际上是这样实现的:一个映射,其中键是集合元素本身,并且具有一个伪值
- 列表与映射:在列表中,您可以通过元素的
索引(在列表中的位置)访问元素,而在映射中,您可以通过其键访问任何类型的操作系统(通常为:ID)int
- 列表与集合:在列表中,元素受其位置的约束,可以重复,而在集合中,元素只是“存在”(或不存在)并且是唯一的(意思是
,或等于()
)比较()
- :表示无重复项的
集合的接口。
- :一个
由一个。当排序不重要时,最快和最小的内存使用率集合
- :A
,添加链接列表以按插入顺序关联元素。“next”元素是最近插入的下一个元素HashSet
- :A
,其中元素由A(通常)排序。最慢和最大的内存使用,但对于基于比较器的排序是必需的集合
- :为单个枚举类型定制的极其快速高效的
集合
- :一个
- :一个接口,表示一个
,该集合的元素是有序的,每个元素都有一个表示其位置的数字索引,其中0是第一个元素,集合
是最后一个元素。(长度-1)
- :由数组支持的
,其中数组的长度(称为“容量”)至少与元素数(列表的“大小”)相同。当大小超过容量时(当添加列表
元素时),将使用(容量+1)-th
的新容量重新创建阵列--此重新创建速度很快,因为它使用。删除和插入/添加元素需要将所有相邻元素(右侧)移入或移出该空间。访问任何元素都很快,因为它只需要计算(新长度*1.5)
即可找到它的位置,(元素零地址+所需索引*元素大小)
优于数组列表
链接列表
- :由一组对象支持的
列表,每个对象都链接到其“上一个”和“下一个”邻居。
也是一个LinkedList
和队列
。从第一个或最后一个元素开始访问元素,然后遍历,直到达到所需的索引。插入和删除,一旦通过遍历达到所需的索引,只需重新映射直接相邻链接以指向新元素或绕过现在已删除的元素即可Deque
- :由数组支持的
- :表示集合的接口,其中每个元素都有一个标识“键”——每个元素都是一个键值对。
- :A
Map
- :A