java 数组

1.数组的定义
数据类型[ ] 数组名 = new 数据类型[容量];
赋值左侧
数据类型:
	告知编译器,当前数组中能够保存的数据类型到底是什么?并且在确定数据类之后,整个数组
中保存的数据类型无法修改!!!
[]:
	1. 告知编译器这里定义的是一个数组类型数据。
	2. 明确告知编译器,数组名是一个【引用数据类型】
数组名:
	1. 操作数据非常重要的数据!!!
	2. 数组名是一个【引用数据类型】
数据类型:
	前后呼应,告知编译器这里支持存储的数据类型到底是什么?	
[容量]:
	容量==> Capacity
	告知编译器,当前数组中能够存放的对应数据类型的数据,最大存储多少个!!
【注意】
	一旦确定容量,针对于当前数组,后期容量无法修改
2.数组的下标
规定
	数组中的下标是从0开始,到数组的容量-1
例如:
	数组容量10
	有效下标范围:0 ~ 9
	超出有效下标范围,都是无效的下标
3.数组内存分析图

数组内存分析图

因为数组还有length属性,所以上图中数组所占的内存堆区的大小是大于40的
4.数组中的内存转转移问题

在这里插入图片描述

图中 arr1 = arr2;
其实是将 arr2 的地址赋值给 arr1,所以导致数组arr1 会指向 arr2数组所在的堆区地址,所以之后对
数组arr1 的操作一样会影响到数arr2;
5.数组案例
找出指定元素在指定数组中所有下标位置
6.代码
public class Demo3 {
 public static void main(String[] args) {
  int[] arr = {5, 3, 5, 7, 5, 1, 3, 5, 7, 9};
  int[] indexArr = new int[arr.length];
  
  int count = allIndexOf(arr, indexArr, 5);
  
  // count是查询到的指定元素个数,同时可以利用与循环中,找到对应的元素
  for (int i = 0; i < count; i++) {
   System.out.println(indexArr[i]);
  }
  
 }
 /**
  * 找到指定源数据数组中所有指定元素所在的下标位置,保存到indexArr中,并且返回值
  * 是找到的元素个数
  * 
  * @param arr 源数据数组,int类型
  * @param indexArr 找到的下标位置存储数组,要求该数组的容量不得小于源数据容量
  * @param find 需要查询的指定数据
  * @return 返回值大于0,找到的数据个数,没有找到返回0
  */
 public static int allIndexOf(int[] arr, int[] indexArr, int find) {
  // 参数合法性判断
  if (arr.length > indexArr.length) {
   System.out.println("Input Parameter is Invalid!");
   // 参数不合法,没有找到数据
   return 0;
  }
  
  /*
   * 定义一个变量,
   *   1. 计数器,记录找到的元素个数
   *   2. 尾插法当中下一次存放元素的位置
   */
  int count = 0;
  
  // 利用for循环遍历整个源数据arr数组
  for (int i = 0; i < arr.length; i++) {
   // 找到了对应的元素,需要保存下标i
   if (find == arr[i]) {
    // 保存到indexArr数组中
    // 需要使用尾插法!!!保存下一次存放数据的位置
    indexArr[count] = i; 
    // 计数器 += 1 
    count += 1;
   }
  }
  
  return count;
 }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值