• Collection框架的结构(面试重点)


    介绍Collection框架的结构(面试重点)

    首先,一图流

    单列集合:

    单列集合: 每个元素都是一个单独的个体

    Collection接口

    单列结合的顶层接口

    • List接口:

      有序,可重复

      有序:读取顺序一致

      可重复:可以存储重复的元素

      • 1、 特点:

        • 有序:每个元素都有自己的位置,不同位置是有分别的
          【有索引】:每个元素都有自己的编号
        • 可以重复:即使是值相同的几个元素,位置和索引也各不相同,可以区分这几个值
      • 2、特有方法:

        • add(int index, Object obj):
          • 在指定索引上,添加指定的元素
        • remove(int index):
          • 删除指定索引上的值
        • set(int index, Object obj):
          • 将指定索引上的值,修改为指定的值
        • get(int index):
          • 根据给定的索引,获取对应位置的值
        • 第一种遍历方式
        • 第二种遍历方式
        • 第三种遍历方式
          • 1、针对List集合特有的遍历方式
          • 2、 可以通过集合的size方法获取list集合索引的范围,根据索引通过get方法可以获取指定索引的值。
        • List的实现类
          • ArrayList(实现类):底层是数组,顺序存储,查改快,增删慢
          • LinkedList(实现类): 底层是链表,增删快,查改慢
            • LinkedList的特有方法:
              • addFirst(Object obj):在头部添加元素
              • addLast(Object obj):在尾部添加元素
              • removeFirst():删除头部元素
              • removeLast():删除尾部元素
              • getFirst():获取头部元素
              • getLast():获取尾部元素
      • Set接口

        无序不可重复
        无序:存取顺序不一致
        不可重复:不能存储重复的元素

        • 1、特点:
          • 无序:没有任何前后的分别,所有的元素没有位置的概念,所有的元素都在集合中
          • 没有索引:集合中没有任何位置,元素也就没有位置的属性
          • 不能重复:没有位置的区分,相同值的元素没有任何分别,所以不能重复
        • 2、实现类
          • HashSet (实现类)
            • HashSet保证元素唯一性的原理
              • (一)HashSet存储jdk提供的类型的元素
                • HashSet存储jdk提供的类型的元素,发现直接保证了元素的唯一性,值相同的元素都去掉了
              • (二)HashSet存储自定义类型的元素
              • (三)hashCode方法
              • (四)HashSet保证元素唯一性原理的总结
                • 1、某个对象obj,在即将要存储到HashSet集合的时候,首先计算obj的hashCode值
                • 2、在集合中的所有元素的哈希值,都和obj的哈希值不同,说明在集合中不存在obj,可以直接将obj存储到HashSet中
                • 3、在集合中有若干元素的哈希值,和obj的哈希值相同,并不能说明obj已经存在于集合中,需要使用equals判断obj是否和那些与自己哈希值相同的元素是否相等
                • 4、如果这些元素所有的和obj比较equals之后,都不相等,那么就说明obj不存在于集合中,可以将obj存储到HashSet中
                • 5、如果这些元素有任意一个和obj比较equals之后,发现相等,那么就说明obj已经存在于集合中,所以obj就不能存储,存储失败。
              • (五)保证元素唯一性的操作
                • 1、重写hashCode
                • 2、重写equals方法:
                • 3、最终操作:
                  • 使用快捷键,直接全部生成:alt + shift + s h
          • LinkedHashSet(实现类)
            • 是HashSet的一个子类,和HashSet保证元素唯一的原理相同。
              • 既需要保证元素的唯一,又需要保证原来的顺序,就可以考虑LinkedHashSet类型
        • 3、存储特点:
          • (1)相同的元素无法存储进Set集合
          • (2)集合本身不保证顺序:存储的顺序和取出的顺序不保证一致
        • 4、Set集合的便利
          • 1、没有自己特有的方法,只能使用Collection接口中定义的方法,只能使用Collection的遍历方式
          • 2、第一种:转成数组,toArray(),不带泛型的转数组,得到的是Object类型的数组。
          • 3、第二种:转成数组,toArray(T[] arr),带泛型的转数组,得到的是T类型的数组。
          • 4、第三种:迭代器
          • 5、第四种:增强for循环

    Collections工具类

    • 1、int binarySearch(List list, E e ):
      • 在一个有升序顺序的List集合中,通过二分查找寻找元素e的索引
    • 2、int frequency(Collection c, E e):
      • 返回在集合c中的元素e的个数
    • 3、max、min:
      • 获取集合的最大值或者最小值
    • 4、replaceAll(List list, E oldVal, E newVal):
      • 将集合list中的所有指定老元素oldVal都替换成新元素newVal
    • 5、reverse(List list):
      • 将参数集合list进行反转
    • 6、shuffle(List list):
      • 将list集合中的元素进行随机置换
    • 7、swap(List list, int a, int b):
      • 将a索引和b索引的元素进行交换
    • 8、synchronizedXxx方法系列:
      • 将一个线程不安全的集合传入方法,返回一个线程安全的集合
    • 9、unmodifiableXxx方法系列:
      • 将一个可修改的集合传入方法,返回一个不可修改只读的集合
  • 相关阅读:
    Redis 如何与数据库事务保持一致
    QQ、微信 唯一登陆设计
    Node.js Sequelize如何实现数据库的读写分离
    node.js web应用优化之读写分离
    在docker中使用mysql数据库,在局域网访问
    docker常用管理命令
    基于 Egg.js 框架的 Node.js 服务构建之用户管理设计
    使用mousedown、mousemove、mouseup实现拖拽效果
    VUE中事件修饰符:stop prevent self capture
    基于jsplumb插件制作可拖拽、保存流程图、重绘保存后的流程图总结
  • 原文地址:https://www.cnblogs.com/hnkjdx-ssf/p/15422605.html
Copyright © 2020-2023  润新知