二维数组 赋值_数组,及二维数组

本文介绍了Java中二维数组的基础知识,包括如何声明、初始化和遍历二维数组。讲解了使用Arrays类进行数组操作的方法,如复制和二分查找,并对比了基本数据类型和引用数据类型赋值的区别。
摘要由CSDN通过智能技术生成

d9078304667c2ef741e3e8d3545472cd.png

1.1 命令行参数(C)

在程序运行过程中,可以向应用程序传递一些参数,这些参数称为命名行参数。

 
public class Test01{
 public   static void main(String[] args){
 System.out.println(args.length);
 
 for(int   i= 0;i<args.length;i++){
 System.out.println(args[i]);
 }
 }
}

命令行参数以字符串的形式传入args数组中。可以一次传递0-多个参数,以空格分割。

如果参数中本身包含空格,需要使用引号引起来。

1.2 Arrays

jdk中为了便于开发,给开发者提供了Arrays类,其中包含了很多数组的常用操作。例如快速输出、排序、查找等。

1.2.1 常用方法

import java.util.Arrays;
public class Test02{
 public   static void main(String[] args){
 
 int[]   arr = {4,2,3,1};
 //   【1】数组的字符串形式
 String   str = Arrays.toString(arr);
 System.out.println(str);
  
 //   【2】sort对数组排序(只能升序)-> 内部使用快速排序。
 Arrays.sort(arr);
 System.out.println(Arrays.toString(arr));
 
 //   【3】fill 填充数组
 //Arrays.fill(arr,0);
 //System.out.println(Arrays.toString(arr));
 
 //   【4】equals(arr1,arr2) 判断两个数组是否相等。
 //   数组相等的条件:a.长度相等 b.对应位置元素相等。
 int[]   arr2 = {1,2,3};
 System.out.println(Arrays.equals(arr,arr2));
 }
}

1.2.2 二分法查找

private static int binarySearch0(long[]   a, int fromIndex, int toIndex,
 long   key) {
 int low = fromIndex;
 int high = toIndex - 1;
 
 while (low <= high) {
 int mid = (low + high)   >>> 1;
 long midVal = a[mid];
 
 if (midVal < key)
  low = mid + 1;
 else if (midVal > key)
 high = mid - 1;
 else
 return mid; // key found
 }
 return -(low + 1); // key not   found.
 }

二分法查找必须是有序的数组,如果找到返回索引;如果没有找到,返回-插入点-1。插入点就是key应该放到数组的位置。

1.2.3 数组的复制

copyOf(arr,len) 把arr复制len个长度的元素并返回新数组。如果len>arr.length,新数组的长度末尾用0填充。

copyOfRange(arr,from,to) 从arr中from(包含)位置开始复制到to(不包含)这个范围的元素到新数组中。含头不含尾。

import java.util.Arrays;
public class Test04{
 public   static void main(String[] args){
 
 int[]   arr = {1,3,4,6,8};
 
 int[]   newArr = Arrays.copyOf(arr,6);
 System.out.println(Arrays.toString(newArr));
 
 //   copyOfRange(arr,from,to)
 int[]   newArr2 = Arrays.copyOfRange(arr,1,3);
 System.out.println(Arrays.toString(newArr2));
 }
}

其中System也提供了赋值数组的方法。

arraycopy(srcArr,srcPos,destArr,destPos,len)

srcArr:要复制的源数组

srcPos:从srcArr的srcPos位置开始复制

destArr:复制到的目标数组

destPos:目标数组从destPos开始存放

len:从源数组中复制len个长度

int[] arr2 = new int[arr.length];

System.arraycopy(arr,1,arr2,0,3);

System.out.println(Arrays.toString(arr2));

1.3 二维数组(B)

1.3.1 二维数组基础

二维数组就是数组的数组,数组的元素也是数组。

8387b5bb1898622b7fd5922d19b1c19f.png

二维数组表示行列二维结构。

1.3.2 二维数组的声明

根据二维数组的定义

此时arr = new int[3][];只分配了二维数组的空间,一维数组没有分配空间。

import java.util.Arrays;
public class Test05{
 public   static void main(String[] args){
 
 //   二维数组
 //int[]
 //   (int[]) []
 
 
  // 【1】声明
 int[][]   arr;
 //   【2】初始化一个能存3个一维数组的二维数组
 arr   = new int[3][];
 
 //   【3】赋值
 int[]   arr1 = {1,3,4,5};
 int[]   arr2 = {1,3,4};
 int[]   arr3 = {2,1,6,4};
 
 arr[0]   = arr1;
 arr[1]   = arr2;
 arr[2]   = arr3;
 
 System.out.println(arr);
 System.out.println(Arrays.toString(arr));
 }
}

声明一个规则的二维数组

此时,二维数组已经分配好空间,同时一维也分配好空间。

import java.util.Arrays;
public class Test06{
 public   static void main(String[] args){
 
 //   声明一个规则的二维数组,3行4列
 int[][]   arr;
 arr   = new int[3][4];
 
 arr[0][0]   = 10;
 arr[0][1]   = 20;
 arr[0][2]   = 30;
 arr[0][3]   = 40;
 
 arr[1][0]   = 100;
 arr[1][1]   = 200;
 arr[1][2]   = 300;
 arr[1][3]   = 400;
 
 arr[2][0]   = 1000;
 arr[2][1]   = 2000;
 arr[2][2]   = 3000;
 arr[2][3]   = 4000;
 
 System.out.println(Arrays.toString(arr));
 }
}

当已知二维数组的值数,可以考虑字面量声明

import java.util.Arrays;
public class Test07{
 public   static void main(String[] args){
 
 //   声明字面量二维数组
 int[][]   arr = {
 {10,20,30,40},
 {100,200,300},
 {1000,2000,3000,4000}
 };
 System.out.println(Arrays.toString(arr));
 }
}

1.3.3 二维数组的遍历

import java.util.Arrays;
public class Test08{
 public   static void main(String[] args){
 
 //   声明字面量二维数组
 int[][]   arr = {
 {10,20,30,40},
 {100,200,300},
 {1000,2000,3000,4000}
 };
 //   System.out.println(Arrays.toString(arr));
 
 /*
 for(int   i=0;i<arr.length;i++){
 int[]   t = arr[i];
 for(int   j=0;j<t.length;j++){
 System.out.print(t[j]+"t");
 }
 System.out.println();
 }
 */
 
 
 for(int   i=0;i<arr.length;i++){
 for(int   j=0;j<arr[i].length;j++){
 System.out.print(arr[i][j]+"t");
 }
 System.out.println();
 }
 }
}

总结:

二维数组是行列结构,使用双层for循环,外层for用于控制行,内层for用于控制列

ð 行列结构 => 双层for遍历。

1.4 基本数据类型和引用数据类型赋值的区别

import java.util.Arrays;
public class Test09{
 public   static void main(String[] args){
 
 //   基本数据类型的赋值
 int   a = 10;
 int   b;
 b   = a;
 //   a? b?
 b   = 20;
 //   a? b?
 
 //   引用数据类型的赋值
 int[]   arr = {1,3,5};
 int[]   arr2 = arr;
 arr2[0]   = 100;
 
 System.out.println("arr:"+arr);
 System.out.println("arr2:"+arr2);
 
 System.out.println("arr[0]:"+arr[0]);
 
 }
}

fcff03790e9d0ec22221138cde3a4e93.png

总结:

基本数据类型赋值时,复制的是值

引用数据类型赋值时,复制的是引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值