• 八股文第六天


    时间:2022年7月26日

    第一题:冒泡排序

    冒泡排序算法的原理如下:

    1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。

    2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

    3.针对所有的元素重复以上的步骤,除了最后一个。

    4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较

    @Test
       public void test4(){
        Scanner scanner = new Scanner(System.in);
        int[] ints = new int[5];
        int temp;
        System.out.println("请输入5个数");
        for (int i = 0; i < 5; i++) {
            ints[i]= scanner.nextInt();
        }
        for (int i = 0; i < ints.length; i++) {
            for (int j = 0; j < ints.length-1; j++) {
                if (ints[j]>ints[j+1]){
                    temp=ints[j];
                    ints[j]=ints[j+1];
                    ints[j+1]=temp;
                }
            }
        }
        System.out.println("排序后的结果为:");
        Arrays.stream(ints).forEach(System.out::println);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    集合篇

    第二题:常见的数据结构

    数组,栈,队列,链表,树,散列,堆,图等

    在这里插入图片描述

    • 数组是最常用的数据结构,数组的特点是长度固定,数组的大小固定后就无法扩容了 , 数组只能存储一种类型的数据 ,添加,删除的操作慢,因为要移动其他的元素。

    • 栈是一种基于先进后出(FILO)的数据结构,是一种只能在一端进行插入和删除作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据 在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。

    • 队列是一种基于先进先出(FIFO)的数据结构,是一种只能在一端进行插入,在另 一端进行删除操作的特殊线性表,它按照先进先出的原则存储数据,先进入的数据,在读取 数据时先被读取出来。

    • 链表是一种物理存储单元上非连续、非顺序的存储结构,其物理结构不能只表示数 据元素的逻辑顺序,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。

    • 链表由一系 列的结节(链表中的每一个元素称为结点)组成,结点可以在运行时动态生成。根据指针的 指向,链表能形成不同的结构,例如单链表,双向链表,循环链表等。

    • 树是我们计算机中非常重要的一种数据结构,同时使用树这种数据结构,可以描述 现实生活中的很多事物,例如家谱、单位的组织架构等等。有二叉树、平衡树、红黑树、B 树、B+树。

    • 散列表,也叫哈希表,是根据关键码和值 (key 和 value) 直接进行访问的数据结构, 通过 key 和 value 来映射到集合中的一个位置,这样就可以很快找到集合中的对应元素。

    • 堆是计算机学科中一类特殊的数据结构的统称,堆通常可以被看作是一棵完全二叉 树的数组对象。 图的定义:图是由一组顶点和一组能够将两个顶点相连的边组成的

    第三题:集合和数组的区别(了解)

    区别:数组长度固定 集合长度可变 数组中存储的是同一种数据类型的元素,可以存储基本数据类型,也可以存储引用数据类型;
    集合存储的都是对象,而且对象的数据类型可以不一致。在开发当中一般当对象较多的时候, 使用集合来存储对象。

    第四题:List 和 Map、Set 的区别(必会)

    List 和 Set 是存储单列数据的集合,Map 是存储键值对这样的双列数据的集合;

    • List 中存储的数据是有顺序的,并且值允许重复;
    • Map 中存储的数据是无序的,它的键是不允许重复的,但是值是允许重复的;
    • Set 中存储的数据是无顺序的,并且不允许重复,但元素在集合中的位置是由元素 的 hashcode 决定,即位置是固定的(Set 集合是根据 hashcode 来进行数据存储的,所以位置是固定的,但是这个位置不是用户可以控制的,所以对于用户来说 set 中的元素还是无序的)

    第五题:List 和 Map、Set 的实现类(必会)

    1)Collection是Java提供的集合接口,存储一组不唯一,无序的对象。它有两个子接口List和Set。
    2)Java中还有一个Collections类,专门用来操作集合类 ,它提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 收起 在这里插入图片描述
    1)Collection是Java提供的集合接口,存储一组不唯一,无序的对象。它有两个子接口List和Set。
    2)Java中还有一个Collections类,专门用来操作集合类 ,它提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

    Connection 接口:

    List 有序, 可重复

    ArrayList 优点: 底层数据结构是数组,查询快,增删慢。
    缺点: 线程不安全,效率高

    Vector 优点: 底层数据结构是数组,查询快,增删慢。
    缺点: 线程安全,效率低, 已给舍弃了

    LinkedList 优点: 底层数据结构是链表,查询慢,增删快。
    缺点: 线程不安全,效率高

    Set 无序,唯一

    HashSet 底层数据结构是哈希表。(无序,唯一)

    如何来保证元素唯一性?
    依赖两个方法:hashCode()和 equals()

    LinkedHashSet 底层数据结构是链表和哈希表。(FIFO 插入有序,唯一)
    1.由链表保证元素有序
    2.由哈希表保证元素唯一

    TreeSet 底层数据结构是红黑树。(唯一,有序)

    1. 如何保证元素排序的呢?
      自然排序 比较器排序
    2. 如何保证元素唯一性的呢?
      根据比较的返回值是否是 0 来决定

    Map 接口有四个实现类:

    • HashMap 基于 hash 表的 Map 接口实现,非线程安全,高效,支持 null 值和 null 键, 线程不安全。

    • HashTable 线程安全,低效,不支持 null 值和 null 键;

    • LinkedHashMap 线程不安全,是 HashMap 的一个子类,保存了记录的插入顺序;

    • TreeMap 能够把它保存的记录根据键排序,默认是键值的升序排序,线程不安全。

  • 相关阅读:
    未来城市:数字孪生技术助力智慧城市构建
    LeetCode-918. 环形子数组的最大和
    MySQL高级2-SQL性能分析
    概率论的学习和整理7:理解期望和方差还是要回到随机试验本身,期望不是平均值,方差的公式不同情况不同
    【数据库】MySQL分页查询
    基础工资提高至35万美元、带薪病假天数翻倍,亚马逊、苹果为留人才又出新动作
    59:第五章:开发admin管理服务:12:MongoDB的使用场景;(非核心数据,数据量比较大的非核心数据,人脸照片等隐私的小文件;)
    MongoDB-索引Index
    VUE 级联菜单cascader 的options动态加载页面无变化
    【C++】map与set的封装
  • 原文地址:https://blog.csdn.net/weixin_44233087/article/details/126004125