我的个人博客主页:如果'\'真能转义1️⃣说1️⃣的博客主页
关于Java基本语法学习---->可以参考我的这篇博客:(我在Vscode学Java)
我在VScode学Java(Java一维数组)
目录
For-Each 循环或者加强型循环,它能在不使用下标的情况下遍历数组。
For-Each 循环或者加强型循环,它能在不使用下标的情况下遍历数组。
Java 一维数组
Java数组下标是从零开始的,Java数组下标访问运算符[ ].
Java数组是引用数据类型,长度属性为 length。
(1)Java和其他高级语言都提供了一种使用一个统一的数组名和不同的下标来唯一确定数组 (array)中的元素的数据结构。
(2)可以用一个标识符封装存储一个元素个数固定且元素类型相同的基本类型数据序列或者对象序列。(是一个简单的线性序列,因此访问速度很快。)
根据数组的维度,可以分为一维数组、二维数组、多维数组等。
数组元素的默认值:
- 对于基本数据类型 0,0.0,‘\u000’
- 对于引用元素数据类型string,object等为 null。
- 对于Boolean类型,为false
数组的长度:数组名.length。
数组的元素是通过索引访问的。数组索引从 0 开始,所以索引值从 0 到 array.length-1。
int[] intArray = new int[5];
System.out.println(intArray[0]); // 输出0
double[] doubleArray = new double[5];
System.out.println(doubleArray[0]); // 输出0.0
char[] charArray = new char[5];
System.out.println(charArray[0]); // 输出空字符
boolean[] boolArray = new boolean[5];
System.out.println(boolArray[0]); // 输出false
String[] strArray = new String[5];
System.out.println(strArray[0]); // 输出null
声明数组:先声明,后使用
在Java语言中,采用 ( 数据类型 [ ] 数组名 ) 的形式,而( 数据类型 数组名 [ ] )是保留了C/C++的形式。如今越来越多的语言的风格都采用了第一种的形式了。
//elementType[ ] arrayRefVar;(元素类型[ ] 数组引用变量;)
double [] douarray;
int inarr[];
匿名数组(anonymous array)
new int[]={1,'a',2,4,5};
a=new int []{1.2,4,5,};
简写:
int []a={1.2,4,5,};
b=a;
动态分配内存
Java还提供了其他的方法,例如ArrayList
和LinkedList
。这些类允许您在运行时添加和删除元素,而无需手动管理内存分配。
//java.util.Scanner类从用户读取输入。Scanner类允许您从标准输入读取用户输入。
import java.util.ArrayList;
public class MyClass {
public static void main(String[] args) {
ArrayList<Integer> intList = new ArrayList<Integer>();
intList.add(1);
intList.add(2);
intList.add(3);
System.out.println(intList); // 输出 [1, 2, 3]
}
}
创建数组:分配数据存储的物理空间是在堆上
数组的元素是通过索引访问的。数组索引从 0 开始,所以索引值从 0 ~ array.length-1。
Java语言是通过使用new操作符来创建数组
arrayRefVar = new dataType[arraySize];
// 定义数组
double[] myList = new double[10]; //size=10
//或者不直接给定
int n = sc.nextInt();
int[] intArray = new int[n];
处理数组内容
一般使用基本的三大循环或者 For-Each 循环。
For-Each 循环或者加强型循环,它能在不使用下标的情况下遍历数组。
int[] intArray = {1, 2, 3, 4, 5};
// 使用for-each循环输出数组元素
for (int i : intArray) {
System.out.println(i);
}
不要在进行数组初始化时,既指定数组的长度,也为每个数组元素分配初始值,这样会造成代码错误。
越界访问数组 --->警告
警告 越界访问数组是经常会出现的程序设计错误,它会抛出一个运行错误ArrayIndexOut0fBoundsException。为了避免错误的发生,在使用时应确保所使用的下标不超过arrayRefVar.length-1。
主要原因:是在循环中该使用<的地方误用<=时会犯的错误。
二分查找:
左闭右闭区间的:
public class BinarySearch {
public static int binarySearch(int[] arr, int target) {
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
左闭右开区间的:
public class BinarySearch {
public static int binarySearch(int[] arr, int target) {
int left = 0;
int right = arr.length;
while (left < right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid;
}
}
return -1;
}
排序:
询问cursor
自带方法:
长度为0的数组并非null
(1)Arrays.sort():该方法使用快速排序算法对数组进行排序。时间复杂度为O(nlogn)。
int[] arr = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
(2)Collections.sort():该方法使用归并排序算法对列表进行排序。时间复杂度为O(nlogn)
List<Integer> list = new ArrayList<>(Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5));
Collections.sort(list);
System.out.println(list);
一些术语:
anonymous array (匿名数组)
array initializer(数组初始化语法)
binary search (二分查找)
index (下标)
indexed variable(下标变量)
insertion sort (插入排序)
linear search(线性查找)
selection sort (选择排序)
根据学习和书籍上的内容总结一下:
- 声明数组变量并不会给数组分配任何空间。数组变量不是基本数据类型变量。数组变量包含的是对数组的引用。当创建一个数组时,若它的元素是基本数据类型的数值,那么该数组的初始值的默认值和改数据类型是一致的。
- 只有创建数组后才能给数组元素赋值。可以使用new操作符创建数组,语法如下:newelementType[array.Size] (数据类型[数组大小])。
- 数组中的每个元素都是使用语法arravRefVarlindex1 (数组引用变量[下标])表示的。下标必须是一个整数或一个整数表达式。
- 创建数组之后,它的大小就不能改变,使用array.length就可以得到数组的大小。由于数组的下标总是从0开始,所以,最后一个下标总是array.length-1。如果试图引用数组界外的元素,就会发生越界错误。千万不要用下标1访问数组的第一个元素,其实际上对于该元素的下标应该是0。这个错误称为下标过1错误(index off-by-one error)。
- Java有一个称为数组初始化语法 (array initializer)的表达式,它将数组的声明、创建和初始化合并为一条语句,其语法为:
元素类型[] 数组引用变量={value0,value1,.·,valuek}
- 将数组参数传递给方法时,实际上传递的是数组的引用,更准确地说,被调用的方法可以修改调用者的原始数组的元素。
二维数组是Java中的一种数据结构,它可以被看作是一个由多个一维数组组成的数组。每个一维数组都代表着一个行,而这些一维数组的长度可以不同。 [用于存储表格数据,例如矩阵、棋盘等等。]
Java使用大端字节序的优势在于它可以更容易地在不同系统之间进行互操作。这是因为大端字节序是网络协议和文件格式中最广泛使用的字节序。[进行通信和交换数据。]
目录
Java二维数组创建
Java中创建二维数组,可以使用以下语法:
//Length1 和 Length2 是整数 【左行右列】
type[][] typeName = new type[Length1][Length2];
//拥有以下3种格式
type[][] arrayName = new type[][]{值 1,值 2,值 3,…,值 n}; // 在定义时初始化
type[][] arrayName = new type[Length1][Length2]; // 给定空间,在赋值
type[][] arrayName = new type[Length1][]; // 数组第二维长度为空,可变化
创建形式
int[][] arrayName = new int[rows][columns];
//创建一个具有3行和4列的二维数组
int[][] arrayName = new int[3][4];
数组名 = new 数据类型[第1维的长度][];
//单独初始化每一行来创建二维数组
int[][] arrayName = new int[3][];
arrayName[0] = new int[4];
arrayName[1] = new int[5];
arrayName[2] = new int[6];
要初始化一个二维数组,可以先创建一个具有所需行数的数组,然后为每一行分配空间,方法是将一个具有所需列数的新数组分配给每一行。
Java数组-- >为每一维分配空间
从高维开始进行数组初始化的例子:
a = new int[3][]; // 先为第一维分配空间,注意这时没有为第二维分配空间
a[0] = new int[2]; // 然后为第二维的每一个元素(数组)分配空间
a[1] = new int[1];
a[2] = new int[3];
Java二维数组实现算法
对于矩阵运算,存储矩阵的值,执行加法、减法和乘法等操作。
对于图像处理,表示图像的像素,并对图像应用滤镜或变换。
对于图算法,表示图的邻接矩阵,并执行查找两个节点之间的最短路径等操作
矩阵运算-->乘法
int[][] matrix1 = {
{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}};
int[][] matrix2 = {
{1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10}};
int[][] result = new int[2][2];
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
for (int k = 0; k < 5; k++) {
result[i][j] += matrix1[i][k] * matrix2[k][j];
}
}
}
// 打印结果
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
System.out.print(result[i][j] + " ");
}
System.out.println();
}
九九乘法表:
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
table[i][j] = (i + 1) * (j + 1);
}
}
for (int i = 0; i < 9; i++) {
for (int j = i; j < 9; j++) {
System.out.print((i+1) + "*" + (j+1) + "=" + table[i][j] + "\t");
}
System.out.println();
}