我的个人博客主页:如果'\'真能转义1️⃣说1️⃣的博客主页
关于Java基本语法学习---->可以参考我的这篇博客:(我在Vscode学Java)
我在VScode学Java(Java一维数组)
Java 一维数组
声明数组:先声明,后使用
动态分配内存
创建数组:分配数据存储的物理空间是在堆上
处理数组内容
For-Each 循环或者加强型循环,它能在不使用下标的情况下遍历数组。
越界访问数组 --->警告
二分查找:
左闭右闭区间的:
左闭右开区间的:
排序:
询问cursor
自带方法:
一些术语:
根据学习和书籍上的内容总结一下:
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[];
动态分配内存
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
自带方法:
(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}
- 将数组参数传递给方法时,实际上传递的是数组的引用,更准确地说,被调用的方法可以修改调用者的原始数组的元素。