D02 第二部分 Java基础应用任务

本文详细解释了Java中的基础概念,如数据类型、数组操作、数组与ArrayList的差异、冒泡排序和快速排序示例、访问修饰符、栈区方法调用、异常处理和数据结构如链表。同时,分析了ArrayList的扩容机制和删除元素对容量的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、基础任务

二、进阶任务

三、挑战任务


一、基础任务

1.讨论“数据只要不是基本数据类型,那就是引用类型”是否正确。

这说法是正确的。在Java中,基本数据类型(如int、float、boolean等)是按值传递的,而其他非基本数据类型(对象、数组等)则是按引用传递。基本数据类型直接存储值,而引用类型存储的是对象的引用,即内存地址。

2.数组的创建有几种方式?

使用数组初始化器:int[] arr = {1, 2, 3};
使用new关键字创建数组:int[] arr = new int[3];
直接赋值给数组元素:int[] arr; arr = new int[]{1, 2, 3};

3.请代码举例数组的修改与查询操作,并讨论数组是否具备增删查操作的能力

int[] arr = {1, 2, 3, 4, 5};
​
// 查询操作
int value = arr[2]; // 获取索引为2的元素,value为3
​
// 修改操作
arr[1] = 10; // 将索引为1的元素修改为10
​
// 数组具备增删查操作的能力,但增删操作相对麻烦,需要手动移动元素,并且数组的大小是固定的,需要重新创建数组来实现动态增删。
​

3.请阐述数组有什么优点和弊端?

优点:
​
快速访问:可以通过索引直接访问数组元素,访问速度很快。
连续存储:数组中的元素在内存中是连续存储的,这有助于缓存性能。
​
弊端:
​
大小固定:数组的大小在创建时确定,无法动态改变,需要重新创建数组来实现大小的调整。
插入和删除困难:在数组中间插入或删除元素会涉及到移动其他元素,效率较低。

4.在同一个数组内是否可以放不同类型的数据?

在Java中,数组是同一类型元素的集合,所以在同一个数组内不能直接存放不同类型的数据。数组元素的类型是在创建数组时指定的,并且数组中所有元素必须属于该类型。

5.从内存的角度来讲,数组是随机存取结构吗?

是的,数组是随机存取结构。由于数组中的元素在内存中是连续存储的,可以通过索引直接计算元素的内存地址,实现快速随机访问。

6.参照数组,Arraylist在操作上有什么变化?

ArrayList是动态数组的实现,相比数组,ArrayList具有动态增长和缩减的能力,无需手动管理大小。它提供了一系列方法来方便地进行元素的增删改查操作。

7.数组和arraylist两者,哪个拥有size()方法?

ArrayList拥有size()方法,用于返回集合中元素的个数。而数组没有size()方法,需要通过数组的length属性获取数组的大小。

8.局部变量和成员变量(属性)区别是什么?

局部变量是在方法、构造方法或者语句块中声明的变量,其作用范围仅在声明的块内有效。
成员变量(属性)则是类中声明的变量,可以在整个类内使用,其生命周期与对象的生命周期相同。

9.方法的参数、返回值的作用是什么?

执行功能所需要的信息数据,
输出功能的结果

方法的参数用于接收调用者传递的数据,而返回值用于向调用者返回方法的执行结果。参数允许方法在执行时使用外部传入的数据,而返回值则允许方法将执行的结果传递给调用者。

10.形参与实参的区别是什么?

形参是方法定义时的参数,是变量的声明,用于接收调用者传递的实际参数。实参是调用方法时传递给方法的具体数值,是实际传递给方法的值。

11.如果方法无返回值,该如何声明?

void 修饰符后,方法名前

12.重载机制与参数有何关系?与返回值类型有关系吗?

与参数的数据类型,个数有关,与参数名无关。
没有关系

重载与参数列表有关,通过参数的个数、类型或者顺序来区分。
重载与返回值类型无关,只要参数列表不同即可。

二、进阶任务

13.给定数字序列:38,27,65,12,43,12,6,34,48,请用该数字序列演示冒泡排序以及快速排序算法(思路即可,无需代码)。

冒泡排序(Bubble Sort):
比较相邻元素: 从序列的第一个元素开始,比较相邻的两个元素。
交换位置: 如果顺序不对(即前面的元素大于后面的元素),则交换它们的位置。
一轮完成: 继续进行这样的比较和交换,直到整个序列都是有序的。
多轮迭代: 每一轮迭代都会把未排序部分的最大元素移动到最后。
快速排序(Quick Sort):
选择基准: 从数组中选择一个基准元素,通常是数组的中间元素。
分割数组: 将数组分为两个子数组,小于基准的放在左边,大于基准的放在右边。基准元素在最终排序中的位置就是它的最终位置。
递归排序: 递归地对左右子数组进行排序,重复上述步骤。
合并结果: 子数组排序完成后,整个数组就有序了。
对于给定的数字序列38,27,65,12,43,12,6,34,48:

冒泡排序过程:
第一轮:6,27,12,34,38,12,43,48,65
第二轮:6,12,12,27,34,38,43,48,65(43和48交换位置)
第三轮:6,12,12,27,34,38,43,48,65(没有交换,序列已经有序)

快速排序过程:
选择基准38,标记第一个位置为i,最后一个位置为j

比较i,j标记的数,不是顺序就交换位置。先移动j , 遇到不符合就移动i。反之亦然。

直到i,j标记重合。此时第一轮循环结束,确定基准,分出俩个数组。前面的数组内容比基准小,后一个数组内容比基准大。再次递归这俩个数组。

14.辨析public与private修饰符,阐述在类、变量、方法中起到的作用?

- public:公共的,所有地方都可以访问。

- private:私有的,当前类可以访问。

1. public 修饰符:
在类中的作用:
当一个类被声明为 public,它可以被任何其他类访问,无论这个类是在同一包中还是在不同的包中。
类名必须与文件名相同,一个源文件中只能有一个 public 类。
在变量中的作用:
如果一个变量被声明为 public,它可以被任何类访问。在其他类中可以通过对象引用来访问该变量。
在方法中的作用:
public 方法可以被任何类访问。
public 方法是一个类的接口,表示其他类可以通过该方法与该类进行交互。
2. private 修饰符:
在类中的作用:
当一个类被声明为 private,它只能被同一个类中的其他方法访问,不能被其他类直接访问。
通常用于隐藏实现细节,提供封装性。
在变量中的作用:
如果一个变量被声明为 private,它只能被同一个类中的其他方法访问,不能被其他类直接访问。
通常用于数据封装,通过提供公共方法来控制对变量的访问。
在方法中的作用:
private 方法只能被同一个类中的其他方法调用,不能被其他类调用。
通常用于封装一些内部细节的实现,只在类内部使用。

15.数组会存在上溢和下溢的问题吗?

[上溢:空间已满,继续增数据。]

[下溢:空间已空,继续删数据。]

  1. 上溢:

    • 描述:空间已满,继续增加数据。
    • 对数组的判定:当数组已经被填满,但尝试继续向数组中添加更多数据时,将发生上溢。
  2. 下溢:

    • 描述:空间已空,继续删除数据。
    • 对数组的判定:当尝试从一个空数组中删除数据时,将发生下溢。

16.Arraylist会存在上溢和下溢的问题吗?

在Java中,ArrayList是基于数组实现的动态数组,因此它可以遇到上溢(Overflow)和下溢(Underflow)的问题,尽管ArrayList自身会尽量减小这些问题的发生。

17.main主函数和函数的区别是什么呢?

主函数是程序的入口

调用方式:
main 函数: 由操作系统自动调用,程序启动时执行。
普通函数: 由程序中的其他代码显式调用。

返回值类型:
main 函数: main 函数通常被定义为返回整数类型,用于向操作系统报告程序的执行状态。一般来说,返回0表示程序正常终止,而非零值表示程序异常终止。
普通函数: 普通函数可以有各种返回类型,包括整数、浮点数、对象等,具体取决于函数的定义。

18.描述一下栈区的方法调用过程。

在类加载后,主函数自动运行时进入栈区,在主函数运行中有调用其他方法,将其他方法根据调用顺序依次压栈。

根据栈先进后出的原理,后调用的方法执行后,最后才执行完成主函数。保证程序一定不会中途结束,主函数执行完毕,程序运行结束。

19.Arrays与数组[]是一个概念吗?

Arrays是数组的工具类

数组是一种数据结构

三、挑战任务

21.查阅资料了解什么是链表,了解链表和数组在增删改查上的区别?

链表(Linked List)和数组(Array)都是数据结构,用于存储和组织数据。它们在增删改查等操作上有一些重要的区别:

链表:
结构: 链表是由节点组成的数据结构,每个节点包含数据元素和指向下一个节点的指针。节点之间通过指针链接在一起。

存储: 内存中的链表可以是分散的,每个节点可以存储在内存中的不同位置,通过指针连接起来。

大小: 链表的大小可以动态变化,不需要预先指定大小。每次插入新节点时,动态分配内存。

随机访问: 链表的访问是顺序的,不支持随机访问。要找到链表中的某个元素,需要从头节点开始逐个遍历。

增删操作: 链表在插入和删除操作上相对高效。插入和删除节点只需要调整相邻节点的指针,不需要移动大量元素。

数组:
结构: 数组是一种线性结构,元素在内存中是连续存储的,通过索引可以直接访问。

存储: 数组的元素是在内存中连续存储的,这使得数组在一些操作上更为高效。

大小: 数组在创建时需要指定大小,且大小固定,不支持动态扩展。如果需要更大的数组,通常需要重新创建一个更大的数组,然后将数据复制过去。

随机访问: 数组支持随机访问,可以通过索引直接访问数组中的任何元素。

增删操作: 数组在插入和删除操作上相对低效。插入和删除元素可能需要移动大量元素,特别是在数组中间位置。


链表适用于需要频繁插入和删除操作的场景,而数组适用于需要频繁随机访问元素的场景。在实际应用中,根据具体的需求和操作模式选择合适的数据结构。

22.为什么通常情况是在方法体中使用异常?

错误隔离: 将可能引发异常的代码放在方法体中,可以有效地将错误隔离在特定的代码块中。这有助于提高代码的可维护性和可读性,因为异常处理代码与正常业务逻辑分离。

集中处理: 将异常处理代码放在方法体内使得异常处理可以集中在一个地方。这样,开发者可以更容易地管理和维护异常处理逻辑,而不必在整个程序中散落各处。

在方法体中使用异常,程序员可以更好地组织和管理代码,提高代码的可读性和可维护性,同时也使得程序对错误和异常的处理更为灵活和精确。



23.String是容器类

String是容器类,底层是字符数组

24.简述Arraylist的扩容机制。

ArrayList 的扩容机制简化为以下几个步骤:

初始容量: 初始时,ArrayList 创建一个长度为10的数组。

添加元素: 当添加元素时,如果当前元素个数达到数组容量,就触发扩容。

新容量计算: 计算新容量,通常为当前容量的1.5倍。

创建新数组: 创建一个新的更大的数组。

元素复制: 将原数组中的元素复制到新数组。

更新引用: ArrayList 更新内部引用,指向新数组。

25.简述Arraylist删除元素是否是容量大小会减少 

在Java中,ArrayList 是一个动态数组,它可以根据需要自动增长或缩小容量。当你从 ArrayList 中删除元素时,并不会立即减少其容量。相反,ArrayList 会保留一定的额外容量,以便未来添加元素时不必每次都重新分配内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值