赞
踩
#include<GUIQU.h>
int main {
上期回顾:【Java笔记】第5章:函数
个人主页:C_GUIQU
归属专栏:【Java学习】
return 一键三连;
}
各位小伙伴大家好!上期小编给大家讲解了Java中的函数,接下来讲讲数组!
在Java中,数组是一种用于存储多个相同类型数据的集合。数组在内存中占据连续的空间,每个元素都可以通过索引来访问。
【数组的概念】
length
属性获得。【数组的性质】
int
类型的数组只能包含int
类型的元素。null
。【创建数组】
在Java中,可以使用以下方式创建数组:
// 创建一个包含10个整数的数组
int[] numbers = new int[10];
// 创建一个并初始化一个字符串数组
String[] names = {"Alice", "Bob", "Charlie"};
// 创建一个二维数组
int[][] matrix = new int[3][4];
【访问和修改数组元素】
// 访问第一个元素
int firstElement = numbers[0];
// 修改第三个元素
numbers[2] = 50;
// 输出数组长度
System.out.println("数组长度:" + numbers.length);
【 数组操作】
Java提供了Arrays
类,该类包含了许多用于操作数组的静态方法,如排序、搜索、填充和复制等。
import java.util.Arrays;
// 对数组进行排序
Arrays.sort(numbers);
// 在数组中搜索元素
int index = Arrays.binarySearch(numbers, 50);
// 填充数组
Arrays.fill(numbers, 10);
【注意事项】
在Java中,数组是一种引用数据类型,用于存储多个相同数据类型的元素。
Java中的数组内存分配可以分为两个部分:数组引用的存储和数组元素的存储。
int[] arr;
,这时只是在栈上分配了一个引用变量 arr
,这个变量此时并没有指向任何实际的数组对象。new
关键字创建数组时,如 arr = new int[10];
,会在堆上分配足够的空间来存储数组元素,并且栈上的数组引用 arr
指向这个堆内存中的数组。数组初始化:
int[] arr = {1, 2, 3};
。int[] arr = new int[3];
,此时数组元素会自动初始化为该数据类型的默认值(如整型为0,布尔型为false等)。数组的访问:
Java中的数组是通过索引来访问的,索引从0开始。例如,arr[0]
表示访问数组 arr
的第一个元素。
数组的遍历:
可以使用for循环或者增强for循环(foreach循环)来遍历数组。
数组的默认值:
注意事项:
在Java中,数组一旦创建,其大小就固定不变。这意味着如果你创建了一个长度为10的数组,你就不能直接将其大小增加到20。如果你需要更大的数组,你必须创建一个新数组,然后将原数组的内容复制到新数组中。这个过程通常称为“数组扩容”。
以下是一个简单的数组扩容示例:
public class ArrayExpansion {
public static void main(String[] args) {
int[] originalArray = {1, 2, 3, 4, 5}; // 创建一个初始数组
int newLength = originalArray.length * 2; // 新数组的长度是原数组长度的两倍
// 创建一个新数组,长度是原数组长度两倍
int[] newArray = new int[newLength];
// 将原数组的内容复制到新数组中
for (int i = 0; i < originalArray.length; i++) {
newArray[i] = originalArray[i];
}
// newArray现在就是扩容后的数组
// 如果需要,可以继续向newArray中添加新元素
}
}
在这个例子中,我们首先创建了一个长度为5的数组 originalArray
。然后,我们创建了一个新数组 newArray
,其长度是原数组长度的两倍。接着,我们使用一个for循环将 originalArray
中的所有元素复制到 newArray
中。现在,newArray
就是一个长度为10的数组,前5个元素与 originalArray
相同,后5个元素为默认值(对于整型数组,默认值为0)。
这种方法虽然可以实现数组扩容,但效率并不高,因为涉及到数组的复制。在实际应用中,如果需要频繁地对数组进行扩容,通常会使用一些动态数据结构,如 ArrayList
,它内部会自动处理数组的扩容问题,并提供更高效的添加和删除元素的操作。
在Java中,二维数组是数组的数组,即一个一维数组的每个元素都是一个一维数组。二维数组可以看作是一个表格,有行和列。在内存中,二维数组可以看作是数组的数组,或者是一维数组的嵌套。
二维数组的声明和初始化:
静态初始化:
int[][] myArray = {
{1, 2, 3}, // 第一行
{4, 5, 6}, // 第二行
{7, 8, 9} // 第三行
};
动态初始化:
int rows = 3;
int cols = 4;
int[][] myArray = new int[rows][cols]; // 创建一个3行4列的二维数组
在动态初始化的情况下,每个一维数组默认初始化为其元素类型的默认值(例如,整型为0,布尔型为false等)。
访问二维数组的元素:
二维数组的元素通过行索引和列索引来访问。例如,要访问上面静态初始化的二维数组中的元素5,可以使用 myArray[1][1]
,其中 1
是行索引,1
是列索引。
遍历二维数组:
可以使用嵌套的for循环来遍历二维数组的所有元素:
for (int i = 0; i < myArray.length; i++) { // 遍历行
for (int j = 0; j < myArray[i].length; j++) { // 遍历列
System.out.print(myArray[i][j] + " "); // 访问和打印元素
}
System.out.println(); // 换行
}
注意事项:
在Java中,数组排序是一个常见的操作,可以通过多种方式实现。以下是一些常用的数组排序方法:
Arrays
类提供了一个sort
方法,可以用来对数组进行排序。这是最简单和最直接的方法。int[] numbers = {3, 1, 4, 1, 5, 9};
Arrays.sort(numbers);
sort
方法会使用元素的compareTo
方法(如果对象实现了Comparable
接口)来进行排序。public static void bubbleSort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// 交换 arr[j+1] 和 arr[j]
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
public static void quickSort(int[] arr, int low, int high) { if (low < high) { // 找到基准值的位置 int pivotIndex = partition(arr, low, high); // 分别对基准值左侧和右侧的数组进行快速排序 quickSort(arr, low, pivotIndex - 1); quickSort(arr, pivotIndex + 1, high); } } public static int partition(int[] arr, int low, int high) { // 选择最后一个元素作为基准值 int pivot = arr[high]; int i = (low - 1); for (int j = low; j < high; j++) { // 如果当前元素小于或等于基准值 if (arr[j] <= pivot) { i++; // 交换 arr[i] 和 arr[j] int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } // 交换 arr[i+1] 和 arr[high](基准值) int temp = arr[i + 1]; arr[i + 1] = arr[high]; arr[high] = temp; return i + 1; }
public static void mergeSort(int[] arr, int left, int right) { if (left < right) { // 找到中间索引 int mid = left + (right - left) / 2; // 对左半边进行归并排序 mergeSort(arr, left, mid); // 对右半边进行归并排序 mergeSort(arr, mid + 1, right); // 合并两个有序数组 merge(arr, left, mid, right); } } public static void merge(int[] arr, int left, int mid, int right) { // 计算两个子数组的长度 int n1 = mid - left + 1; int n2 = right - mid; // 创建临时数组 int[] L = new int[n1]; int[] R = new int[n2]; // 将数据拷贝到临时数组中 System.arraycopy(arr, left, L, 0, n1); System.arraycopy(arr, mid + 1, R, 0, n2); // 合并临时数组 int i = 0, j = 0; // 初始索引为left int k = left; while (i < n1 && j < n2) { if (L[i] <= R[j]) { arr[k] = L[i]; i++; } else { arr[k] = R[j]; j++; } k++; } // 拷贝L[]剩余的元素 while (i < n1) { arr[k] = L[i];
至此,Java数组讲解完毕。
感谢您的观看!互三必回!持续更新中~!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。