8.Java之数组

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]

内部原理图:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值