时间: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);
}
集合篇
第二题:常见的数据结构
数组,栈,队列,链表,树,散列,堆,图等
-
数组是最常用的数据结构,数组的特点是长度固定,数组的大小固定后就无法扩容了 , 数组只能存储一种类型的数据 ,添加,删除的操作慢,因为要移动其他的元素。
-
栈是一种基于先进后出(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 底层数据结构是红黑树。(唯一,有序)
- 如何保证元素排序的呢?
自然排序 比较器排序 - 如何保证元素唯一性的呢?
根据比较的返回值是否是 0 来决定
Map 接口有四个实现类:
-
HashMap 基于 hash 表的 Map 接口实现,非线程安全,高效,支持 null 值和 null 键, 线程不安全。
-
HashTable 线程安全,低效,不支持 null 值和 null 键;
-
LinkedHashMap 线程不安全,是 HashMap 的一个子类,保存了记录的插入顺序;
-
TreeMap 能够把它保存的记录根据键排序,默认是键值的升序排序,线程不安全。