Java数组
Java数组
目录
1.数组概述
数组的定义
-
数组是相同数据类型的有序集合
-
数组描述的是相同数据类型的若干个数据,按照一定的先后次序排列组合而成
-
每一个数据称做数组的元素,每个数组元素可以通过一个下标来访问它们
2.数组声明创建
(1).首先必须声明数组变量,才能在程序中使用数组
声明数组变量的语法
dateType[] arrayRefVar; //首选方法
或
dateType arrayRefVar[]; //效果相同,但不是首选方法
(2).Java语言使用new操作符来创建数组,语法如下:
dateType[] arrayRefVar = new dateType[arraySize];
(3).数组的元素是通过索引来访问的,数组索引从零开始
(4).获取数组长度
arrays.length
例: 数组的声明和创建
public class ArraysDemo01 {
public static void main(String[] args) {
int [] nums; //(定义)声明一个数组
nums = new int[10]; //创建一个数组
// nums这个数组可以存放10个int类型的数据
//把声明和创建写一块
//int[] nums = new int[10];
//给数组元素赋值
nums[0] = 1;
nums[1] = 2;
nums[2] = 3;
nums[3] = 4;
nums[4] = 5;
nums[5] = 6;
nums[6] = 7;
nums[7] = 8;
nums[8] = 9;
nums[9] = 10;
System.out.println(nums[0]);
}
}
运行结果
例: 计算所有元素的和
int sum = 0;
//获取数组长度 nums.length
for (int i = 0;i < nums.length;i++){
sum = sum + nums[i];
}
System.out.println("总和为:"+ sum);
运行结果
例:
nums[0] = 1;
nums[1] = 2;
nums[2] = 3;
nums[3] = 4;
nums[4] = 5;
nums[5] = 6;
nums[6] = 7;
nums[7] = 8;
nums[8] = 9;
System.out.println(nums[9]);
//假设我们不给num[9]赋值,这里则输出一个默认值:0
3.内存分析及三种初始化
(1).Java内存
-
堆:
- 存放new的对象和数组
- 可以被所有的线程共享,不会存放别的对象引用
-
栈:
- 存放基本变量类型(会包含这个基本类型的具体数值)
- 引用对象的变量(会存放这个存放在堆里面的具体地址)
-
方法区:
-
可以被所有的线程共享
-
包含了所有的class和static变量
-
声明数组、创建数组和给数组元素赋值时的内存图解
(2).三种初始化
- 静态初始化
// 创建 + 赋值
int[] a = {1,2,3}
Man[] mans = {new Man(1,1) , new Man(2,2)}
- 动态初始化(包含,默认初始化)
int[] a = new int[2];
a[0] = 1;
a[1] = 2;
- 数组的默认初始化
数组是引用类型,它的原数相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化
4.下标越界
(1).数组的四个基本特点
- 数组长度是确定的。数组一旦被创建,它的大小就是不可以改变的
如果越界,则报:ArrayIndexOutOfBoundsException:数组下标异常
-
其元素 必须是相同类型的,不允许出现混合类型
-
数组中的元素可以是任何数据类型,包括基本型和引用型
-
数组变量属引用类型,数组也可以看成是对象,数组中的每一个元素相当于该对象的成员变量
数组本身就是变量,Java中对象是在堆里的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是是在堆中的
(2).数组边界
-
下标的合法区:[0 ~ length - 1] ,如果越界就会报错
public static void main[String[] args]{ int[] a = new int[2]; System.out.println(a[2]); //数组下标越界 }
5.数组的使用
(1).For-Each 循环
例:和for循环遍历使用
public class ArraysDemo02 {
public static void main(String[] args) {
int[] arrays = {1,2,3,4,5};
int sum = 0;
//打印数组所有元素
for (int i = 0; i < arrays.length; i++) {
System.out.print(arrays[i] + " ");
}
System.out.println();
//计算所有元素的和
for (int i = 0; i < arrays.length; i++) {
sum += arrays[i];
}
System.out.println("sum = "+ sum);
//查找最大数
int max = arrays[0];
for (int i = 0; i < arrays.length; i++) {
if (arrays[i] > max){
max = arrays[i];
}
}
System.out.println("max = "+max);
}
}
运行结果
例: 增强for循坏打印数组元素
public class ArraysDemo03 {
public static void main(String[] args) {
int[] arrays = {1,2,3,4,5};
//JDK 1.5
//没有下标
for (int array:arrays){
System.out.print(array);
System.out.println();
}
}
}
(2).数组做方法入参
例:
public class ArraysDemo04 {
public static void main(String[] args) {
int[] arrays = {1,2,3,4,5};
printArray(arrays);
}
//打印数组元素
public static void printArray(int[] arrays){
for (int i = 0; i < arrays.length; i++) {
System.out.print(arrays[i] + " ");
}
}
}
运行结果
(3).数组做返回值
例:
public class ArraysDemo05 {
public static void main(String[] args) {
int[] arrays = {1,2,3,4,5};
int[] reverse = reverse(arrays);
printArray(reverse);
}
//反转数组
public static int[] reverse(int[] arrays){
int[] result = new int[arrays.length];
//反转操作
for (int i = 0,j = result.length - 1; i < arrays.length; i++,j--) {
result[j] = arrays[i];
}
return result;
}
//打印数组元素
public static void printArray(int[] arrays){
for (int i = 0; i < arrays.length; i++) {
System.out.print(arrays[i] + " ");
}
}
}
运行结果
6.多维数组
-
多维数组可以看成是数组的数组。比如二维数组就是一个特殊的一维数组,其中每一个元素都是一个一维数组
-
二维数组
int a[][] = new int[2][5];
以上二维数组 a 可以看成一个2行5列的数组
一维数组和多维数组图解
一维数组
二维数组
例: 创建一个二维数组
public class Demo06 {
public static void main(String[] args) {
//[4][2]:4行2列
/*
1,2 array[0] (可以把它看成一个直角坐标系)
2,3 array[1]
3,4 array[2]
4,5 array[3]
*/
int[][] array = {{1,2},{2,3},{3,4},{4,5}};
//打印{1,2}
System.out.print(array[0][0] + " ");
System.out.println(array[0][1]);
}
}
运行结果
例: 用for循坏打印出这个数组
public class Demo06 {
public static void main(String[] args) {
int[][] array = {{1,2},{2,3},{3,4},{4,5}};
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j] + ",");
}
}
}
}
运行结果
7.Arrays类
-
数组的工具类 java.util.Arrays
-
由于数组对象本身没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们速用,从而可以对数据的对象进行一些基本的操作
-
查看 JDK 帮助文档
-
Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,从而“不用”使用对象来调用
-
具有一下常用功能
- 给数组赋值:通过 fill 方法
- 对数组排序:通过 sort 方法(升序)
- 比较数组:通过 equals 方法比较数组中元素值是否相等
- 查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作
例:
import java.util.Arrays;
public class Demo07 {
public static void main(String[] args) {
int[] a = {1,45,988,345,652,0,99};
//打印数组元素
System.out.println(Arrays.toString(a));
//排序
Arrays.sort(a);
System.out.println(Arrays.toString(a));
}
}