Java高级知识复盘之集合

Java高级知识复盘之集合

集合是一种容器,相较于数组容器,集合可以无限添加数据,无需考虑元素的移动,而且集合中有较多的数据结构可供选择,但是集合中都是对象,不能出现基本数据类型,所以需要使用包装类。

可以实现集合的接口分为:

Collection接口

        List接口

        Set接口

Map接口

Collection接口

Collection接口下的集合都是 单值

接口中定义的常用方法:

        add():添加

        addAll():一次性添加多个对象

        remove():删除指定内容

        removeAll():一次性删除多个对象

        containsAll():是否包含指定集合中所有的元素对象

        clear():清空

        toArray():把Collection集合对象转换为一个Object数组

List接口

实现了List接口实现类中的集合元素是有序(是存取有序 索引 也是从0开始)而且可以重复(集合元素对象可以相等)

常用方法:

        get():根据指定索引获取集合元素对象

        set():更改对象内容,用新的对象去替换指定索引的所对应的对象

        insert():插入指定索引进行插入

        remove():根据索引删除

        indexOf():指定对象首次出现的索引值

        lastIndexOf():指定对象最后一次出现的索引值

实现类

ArrayList

  • ArrayList的底层是一个Object数组,来存放集合元素对象

  • 第一次扩容的时候是指向一个长度为10的Object数组;第二次扩容的时候 长度为15 ,22,33,规则为上一次长度的一半,不算余数

  • 创建ArrayList对象的时候,推荐使用有参构造避免进行多次无效扩容,可以给一个预估值

  • ArrayList 底层是一个Object数组,数组的内存空间是连续的;

    • 数组的查询性能较高,查询的时间复杂度是O(1) 和元素个数没有关系;

    • 指定位置新增(插入)和删除的时候性能较低,因为内部要进行元素移动新增和删除时间复杂度是O(n);

LinkedList

  • 链表分为单向链表和双向链表,链表元素之间内存不连续

  • 底层是双向链表;

  • LinkedList的查询性能较低,查询时间复杂度O(n); 但是指定位置新增和删除性能比较高,只涉及到前后节点的指向的改动

Vector

  • Vector底层也是Object数组,和ArrayList 一样

  • Vector是线程安全的,可以在多线程项目中应用;

  • ArrayList和LinkedList都是线程不安全的,不能在多线程中使用,否则会出现线程安全问题

Set接口

  • 集合元素都是单值

  • 实现了Set接口实现类中的集合元素是无序(没有索引)而且不可重复

实现类

HashSet

HashSet内部使用的是HashMap存储对象,可以理解为是HashMap的副产品

LinkedHashSet

LinkedHashSet 是HashSet的子类 内部是 LinkedHashMap存储对象,维持元素的添加顺序

TreeSet

TreeSet内部使用的是 TreeMap 存储对象

Map接口

  • Map 集合元素都是成对的值 Key-Value键值对(主键),一对才算一个集合元素

  • 由Key映射出来Value,每一个唯一的Key都能对应一个Value

  • Map中的Key对象是不可重复的 比如身份证号(ID)-> Person对象 单车Id -> 单车对象

接口中定义的常用方法:

put():添加对象

get():根据Key对象获取其所对应的value对象

equals():判断是否相等

size():集合长度

isEmpty():是否为空

containsKey():是否包含指定的Key对象

containsValue():是否包含指定的Value对象

remove():根据指定的Key对象删除此键值对

实现类

HashMap

  • HashMap 底层是哈希表(数组+单向链表+红黑树,在JDK8及之后加入了红黑树 ),哈希表中使用了哈希算法;

  • 加入红黑树的原因是为了提高单向链表的查询性能

  • 红黑树其实也是一颗二叉搜索树,树中的节点有序 左子树都是小于根节点的 右子树都是大于根节点的

  • 红黑树查询时间复杂度 O(log2n) 单向链表查询时间复杂度是O(n)

  • HashMap 结合了数组和链表的优势

  • 调用无参构造创建HashMap 内部数组第一次初始化的时候长度是16,以后都是 以2倍进行扩容 32 64 128 ;保证数组的长度都是2的指数值;

  • 推荐使用HashMap的有参构造,避免进行多次无效扩容浪费性能

LinkedHashMap

  • LinkedHashMap是HashMap 的子类;

  • 底层是哈希表(数组+链表+红黑树)+双向链表,为了维持元素的添加顺序

TreeMap

  • 底层是红黑树 二叉排序树 树节点有顺序,插入的时候要根据Key对象比较大小

  • 内部要进行排序 ,要求Key类型是可以比较大小的

  • 要求Key类型要么实现Comparable接口 ,要么提供一个外部的比较器

Hashtable

  • 底层是哈希表(数组+链表)

  • Hashtable是线程安全,HashMap是线程不安全

  • Hashtable 虽然线程安全 但是性能较低,ConcurrentHashMap 是线程安全的; 性能较高

  • 单线程应用中使用HashMap,多线程应用中 使用 ConcurrentHashMap

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java开发工程师的盘通常包括以下内容: 1. 项目回顾:回顾参与的项目,包括项目的目标、范围、进展和成果。评估项目的成功度和不足之处,总结项目经验和教训。 2. 技术盘:回顾所使用的技术栈和工具,评估其在项目中的应用效果和可行性。探讨技术选型的优劣,总结技术上的挑战和解决方案。 3. 代码盘:审查自己编写的代码,评估代码的质量和可维护性。检查是否符合编码规范和最佳实践,发现潜在的问题并进行改进。 4. 故障排查与修:回顾在项目中遇到的故障和问题,分析排查过程和解决方案。总结故障处理经验,以便在未来遇到类似问题时能够更好地应对。 5. 团队合作与沟通:评估自己在团队合作中的表现,包括与其他开发人员、测试人员和项目经理的协作情况,沟通效果和问题解决能力。 6. 个人成长与学习:反思自己在项目中的技术进步和个人成长,记录学到的新知识和经验。制定个人学习计划,确定下一步的技术提升目标和学习路径。 7. 总结与改进:总结盘过程中得出的结论和建议,提出项目和个人改进的措施。制定具体的行动计划,以便在下一次项目中能够更好地应对挑战。 盘是一个持续学习和不断改进的过程,通过反思和总结过去的经验,可以帮助Java开发工程师不断提高自己的技术水平和工作效率,为未来的项目取得更好的成果做好准备。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值