Java之数组
一、一维数组
1.什么是数组
数据是一种数据结构,用来存储同一类型值的集合。通过一个整型下标可以访问数组中的每一个值。
★声明一个变量就是在内存中划出一块合适的空间。
★声明一个数组变量就是在内存中划出一块连续的空间
2.数组的特点
-
存放相同数据类型
-
内存中连续分配相同大小的空间
-
大小一旦确定将不可扩容或缩容
-
检索元素速度快,而添加删除元素速度慢
-
使用下标访问元素,下标从0开始
-
数组变量代表的是内存空间中一块连续的内存
3.数组的使用
(1)数组的声明
在声明数组变量时,需要指出数组的数据类型,数据类型后紧跟[]和数组变量名。
int[] a;
String[] b;
(2)分配空间
上述语句只是声明的数据变量,并未为其开辟空间,此时的数组变量值为null。
声明数组并分配空间的语法:
数据类型[] 数组名 = new 数据类型[大小]
注: 数组长度不要求是常量:new int[n]会自动创建一个长度为n的数组。
score = new int[30];
name = new String[30];
(3)数组赋值
方法1:边声明边赋值(这种不需要new,自动分配空间)
int[] score = {1,2,3,4};
String[] name = new String[]{"张三","李四","王二"} //[]中不能指定数组长度
方法二:动态的从键盘输入信息,并赋值
Scanner sc = new Scanner(System.in);
for(int i = 0;i<30;i++)
{
score[i] = sc.nextInt();
}
(4)遍历数组
使用数组的length属性可以获取数组的长度
for(int i = 0;i < nums.length;i++)
{
System.out.println(nums[i]);
}
//或者使用foreach循环(写法简单)
for(int n : nums) //nums中的元素值会依次赋予给n
{
System.out.print(n + "\t")
}
4.数组的补充知识
(1)数组的默认值
当声明一个数组变量,未为其开辟内存空间时,数组变量存在一个默认值。
-
基本数据类型数组的默认值是:0,0.0,false等
-
引用数据类型数组的默认值是:null
(2)数组的排序
使用Arrays类中的sort方法,可以对数组进行排序。sort使用的是优化过的快速排序算法。
注:使用数组方法前需要导入import java.util.Arrays;
int[] score = {69,78,61,99,52};
Arrays.sort(score); //score中的序列就已经排列好了
//52 61 69 78 99
(3)数据的拷贝
Java中允许将一个数组变量拷贝给另一个数组变量。但这时,两个变量将引用同一个数组:
int[] new_score = score;
new_score[5] = 12;//score[5]的值也会被修改为12
如果只是希望将一个数组中所有值拷贝到一个新的数组中,则要使用Arrays类中的copyOf方法:
语法形式:
-
static type copyOf(type[] a, int length)
-
static type copyOfRange(type[] a, int start, int end)
返回与a类型相同的一个数组,其长度为length或者end-start。
参数:
-
a 类型为int,long,short,char,byte,boolean,float或者double(不能为引用数据类型,否则还是拷贝地址)
-
start 起始下标(包含这个值)
-
end 终止下标(不包含这个值)。这个值可能大于a.length,这个情况下,结果为0或false
-
length 拷贝的数据元素长度,如果length值大于a.length,结果为0或false
int[] new_score1 = Arrays.copyOf(score,score.length)
int[] new_score2 = Arrays.copyOfRange(score,2,10)//包括2,不包括10
二、二维数组
1.二维数组的声明
- case1(动态初始化):
int[][] nums = new int[3][2];
nums[0][1] = 15; //给具体元素位赋值
这里定义了名称为nums的二维数组,二维数组中有3个一维数组,每一个一维数组中分别有2个元素,一维数组的名称分别为nums[0],nums[1],nums[2]。
- case2(动态初始化):
int[][] nums = new int[3][]; //不指定列值
//这种写法,可以对一维数组分别进行初始化
nums[0] = new int[3];
nums[1] = new int[1];
nums[2] = new int[2];
二维数组nums中有3个一维数组,每个一维数组都是默认初始化值null(注意:区别于case1)。
- case3(静态初始化):
int[][] nums = new int[][]{{1,3,2},{6,4,7},{9,8,5,4}};
定义一个名称为nums的二维数组,二维数组中有三个一维数组,且每一个一维数组中的具体元素也都已经初始化。
第一个一维数组nums[0] = {1,3,2};
第二个一维数组nums[1] = {6,4,7};
第三个一维数组nums[2] = {9,8,5,4};
第三个一位数组的长度表示方式:nums[2].length;
注意特殊写法:int[] x,y[]; x是一位数组,y是二维数组。
2.数组元素访问
score[1][2]
内部原理图: