数组
相同类型数据的有序集合,可以通过下标访问每一个数组元素
数组也是对象,数组元素相当于是对象的成员变量
数组的声明和创建
声明
// array type array name
int[] nums1; // definition, prefer
int nums2[];
创建
int[] num = new int[10];
dataType[] arrayRefVar = new dataType[arraySize];
- 数组元素通过索引访问,索引从0 开始
- 获取数组的长度:arrays.length
int[] nums1; // 1. definition, prefer
// 2. create an array
nums1 = new int[10]; //can store 10 int type numbers
// int[] num = new int[10];
// 3. assign value to array
nums1[0] = 1;
nums1[1] = 2;
nums1[2] = 3;
System.out.println(nums1[0]); // output:1
int sum = 0;
for (int i = 0; i <nums1.length ; i++) {
sum += nums1[i];
}
System.out.println(sum);
内存分析
java内存
-
堆
存放new的对象和数组
可以被所有的线程共享,不会存放别的对象引用
-
栈
存放基本的变量类型(包含这个基本类型的具体数值)
引用对象的变量(会存放这个引用在堆里面的具体地址)
-
方法区
可以被所有线程共享
包含了所有的class和static变量
-
声明数组
int[] array;
-
创建数组
array = new int[10] new的时候会在堆中取一块内存,开辟和数组大小一样的内存,并从栈中的array指向堆中的内存地址 在数组被赋值之前,默认值都为0(int类型)
-
给数组元素赋值
nums[0] = 1; nums[1] = 2; ...
如果在此处获取第十一个元素: nums[10]
则会报出异常:数组下标越界
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
初始化
- 静态初始化
- 动态初始化
- 默认初始化
public class ArrayDemo02 {
public static void main(String[] args) {
// 1. static initialization: create + assign value
int[] a = {1,2,3,5,7,8};
// reference type
// there is a package named Man
//Man[] mans = {new Man(),new Man()};
// 2. dynamic initialization: conclude default initialization
int[] b = new int[10];
b[0] = 10;
}
}
数组边界
合法区间:[0,length-1]
数组使用
基本用法
- 打印数组元素
- 求和
- 求最大值
public class ArrayDemo03 {
public static void main(String[] args) {
int[] arr = {1,2,4,5,6};
// 1. print all array members
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
// 2. calculate sum of all members
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
System.out.println(sum);
// 3. find max value
int max_value = arr[0];
for (int i = 1; i < arr.length; i++) {
if (max_value < arr[i]){
max_value = arr[i];
}
}
System.out.println(max_value);
}
}
进阶
- 函数:打印数组元素
- 反转数组
public class ArrayDemo04 {
public static void main(String[] args) {
int[] arr = {1,4,6,7,3};
// for (int i : arr) {
// System.out.println(i);
// }
printArray(arr);
int[] reverse = reverse(arr);
printArray(reverse);
}
// 1. print array members
public static void printArray(int[] arr){
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
// 2. reverse array
public static int[] reverse(int[] arr){
int[] result = new int[arr.length];
for (int i = arr.length - 1; i >= 0 ; i--) {
result[arr.length - i - 1] = arr[i]; // index bound
}
return result; // array as return value
}
}