我应该使用哪个Java集合? 这个问题是一个使用C++的集合时使用的方便流程图。

我应该使用哪个Java集合? 这个问题是一个使用C++的集合时使用的方便流程图。,java,algorithm,arraylist,collections,hashmap,Java,Algorithm,Arraylist,Collections,Hashmap,我认为对于那些不确定应该使用哪个集合的人来说,这是一个有用的资源,所以我试图为Java找到一个类似的流程图,但未能做到这一点 有哪些资源和“备忘单”可以帮助人们在使用Java编程时选择正确的集合?人们如何知道他们应该使用什么列表、集合和映射实现?因为我找不到类似的流程图,所以我决定自己制作一个 此流程图不尝试涵盖同步访问、线程安全等内容或遗留集合,但它确实涵盖了3个标准集合s、3个标准映射s和2个标准列表s 此图像是为此答案创建的,并根据最简单的属性授权,即通过链接到此问题或此答案 其他资源

我认为对于那些不确定应该使用哪个集合的人来说,这是一个有用的资源,所以我试图为Java找到一个类似的流程图,但未能做到这一点


有哪些资源和“备忘单”可以帮助人们在使用Java编程时选择正确的集合?人们如何知道他们应该使用什么列表、集合和映射实现?

因为我找不到类似的流程图,所以我决定自己制作一个

此流程图不尝试涵盖同步访问、线程安全等内容或遗留集合,但它确实涵盖了3个标准集合s、3个标准映射s和2个标准列表s

此图像是为此答案创建的,并根据最简单的属性授权,即通过链接到此问题或此答案

其他资源

可能最有用的其他参考是oracle文档中的下一页,该页描述了每种参考

哈希集与树集

这里详细讨论了何时使用
HashSet
TreeSet

ArrayList vs LinkedList


详细讨论:

这里有更简单的图片。故意简化

  • 是任何包含称为“元素”(类型相同)的数据的东西。没有更具体的假设

  • 是一个索引数据集合,其中每个元素都有一个索引。类似于阵列,但更灵活

    列表中的数据保持插入顺序

    典型操作:获取第n个元素

  • 是一个元素包,每个元素只有一次(使用
    equals()
    方法区分元素)

    存储集合中的数据主要是为了知道有哪些数据

    典型操作:告诉列表中是否存在元素

  • 类似于列表,但不是通过其整数索引访问元素,而是通过其键(即任何对象)访问元素。如PHP中的数组:)

    地图上的数据可以通过它们的键进行搜索

    典型操作:通过元素ID获取元素(其中ID是任何类型的,而不仅仅是列表中的
    int

  • 区别
    • Set vs.Map:在Set中,您可以自己搜索数据,而在Map中,您可以按键搜索数据

      注意:标准库集合实际上是这样实现的:一个映射,其中键是集合元素本身,并且具有一个伪值

    • 列表与映射:在列表中,您可以通过元素的
      int
      索引(在列表中的位置)访问元素,而在映射中,您可以通过其键访问任何类型的操作系统(通常为:ID)

    • 列表与集合:在列表中,元素受其位置的约束,可以重复,而在集合中,元素只是“存在”(或不存在)并且是唯一的(意思是
      等于()
      ,或
      比较()


    这很简单:如果您需要使用映射到的键来存储值,请转到映射界面,否则请使用列表查找可能重复的值,如果您不希望在集合中重复值,请最后使用设置界面

    以下是完整的解释,包括主要非并发、非同步集合的流程图等 :一个接口,表示无序的项目“包”,称为“元素”。“下一个”元素未定义(随机)

    • :表示无重复项的
      集合的接口。
      
      • :一个
        集合
        由一个。当排序不重要时,最快和最小的内存使用率
      • :A
        HashSet
        ,添加链接列表以按插入顺序关联元素。“next”元素是最近插入的下一个元素
      • :A
        集合
        ,其中元素由A(通常)排序。最慢和最大的内存使用,但对于基于比较器的排序是必需的
      • :为单个枚举类型定制的极其快速高效的
        集合
    • :一个接口,表示一个
      集合
      ,该集合的元素是有序的,每个元素都有一个表示其位置的数字索引,其中0是第一个元素,
      (长度-1)
      是最后一个元素。
      • :由数组支持的
        列表
        ,其中数组的长度(称为“容量”)至少与元素数(列表的“大小”)相同。当大小超过容量时(当添加
        (容量+1)-th
        元素时),将使用
        (新长度*1.5)
        的新容量重新创建阵列--此重新创建速度很快,因为它使用。删除和插入/添加元素需要将所有相邻元素(右侧)移入或移出该空间。访问任何元素都很快,因为它只需要计算
        (元素零地址+所需索引*元素大小)
        即可找到它的位置,
        数组列表
        优于
        链接列表
      • :由一组对象支持的
        列表,每个对象都链接到其“上一个”和“下一个”邻居。
        LinkedList
        也是一个
        队列
        Deque
        。从第一个或最后一个元素开始访问元素,然后遍历,直到达到所需的索引。插入和删除,一旦通过遍历达到所需的索引,只需重新映射直接相邻链接以指向新元素或绕过现在已删除的元素即可
    • :表示集合的接口,其中每个元素都有一个标识“键”——每个元素都是一个键值对。
      • :A
        Map