Java数组之二维数组
Java中除了一维数组外,还有二维数组,三维数组等多维数组。本文以介绍二维数组来了解多维数组。
1.二维数组的基础
二维数组的定义:二维数组就是数组的数组,数组里的元素也是数组。

二维数组表示行列二维结构
2.二维数组的声明
二维数组有三种声明方式。
2.1.根据二维数组的定义
import java.util.Arrays;
public class Test05{
public static void main(String[] args){
//根据二维数组的定义
//二维数组
//int[] arr;
//(int[])[]arr; //声明
int[][] arr;
//初始化一个能存三个一维数组的二维数组
arr = new int[3][];
//赋值
int[] arr1 = {3,4,5,7};
int[] arr2 = {3,4,6};
int[] arr3 = {3,4,7,8}; arr[0] = arr1;
arr[1] = arr2;
arr[2] = arr3; System.out.print(arr);
System.out.println(Arrays.toString(arr));
}
}
此时arr = new int[3][];只分配了二维数组的空间,一维数组没有分配空间。
2.2.声明一个规则的二维数组
import java.util.Arrays;
public class Test06{
public static void main(String[] args){
//声明一个规则的二维数组,3行4列
int[][] arr = new int[3][4];
arr[0][0]=10;
arr[0][1]=10;
arr[0][2]=10;
arr[0][3]=10; arr[1][0]=10;
arr[1][1]=10;
arr[1][2]=10;
arr[1][3]=10; arr[2][0]=10;
arr[2][1]=10;
arr[2][2]=10;
arr[2][3]=10; System.out.println(Arrays.toString(arr));
}
}
此时,二维数组已经分配好空间,同时一维也分配好空间。
2.3.当已知二维数组元素的数值,可以考虑字面量声明
import java.util.Arrays;
public class Test02{
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));
}
}
3.二维数组的遍历
import java.util.Arrays;
public class Test02{
public static void main(String[] args){
//已知数组元素,二维数组的声明方式
int[][] arr ={
{10,20,30,40},
{100,200,300},
{1000,2000,3000,4000}
};
//遍历二维数组
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遍历。
以上,我们就了解完二维数组的基本知识了。
此外,在学习数组知识的时候有一些细节是需要我们注意的,就是基本数据类型和引用数据类型赋值的区别。接下来我们通过一些小练习来讲解一下基本数据类型和引用数据类型赋值的区别。
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]);
}
}
通过图解来加深理解。

总结:
基本数据类型赋值时,复制的是值
引用数据类型赋值时,复制的是引用。
5.Arrays类
在上面,我们运用了Array类,关于Array类我们也来讲解一下关于Array类的用法。
jdk中为了便于开发,给开发者提供了Arrays类,其中包含了很多数组的常用操作。例如快速输出、排序、查找等。
5.1常用用法
import java.util.Arrays;
public class Test00{
public static void main(String[] args){
//Arrays类的常用方法
int[] arr = {4,3,7,8};
//【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,fromIndex,toIndex,填充的值);
*toIndex:结束下标不包含,(含头不含尾)
*/
//Arrays.fill(arr,0,4,2);
//System.out.println(Arrays.toString(arr)); //【4】equals(arr1,arr2)判断两个数组是否相等。
//数组相等的条件是:a.长度相等 b.两个数组对应位置的元素相等
int[] arr3 = {3,4,7,8};
System.out.println(Arrays.equals(arr,arr3));
}
}
5.2.二分法查找
import java.util.Arrays;
public class Test03{
public static void main(String[] args){
//二分法查找,二分法查找必须是有序的数组,如果找到返回索引;
//源码
/*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; //除2
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. low为插入点,即Key应该放在数组中的位置
}
*/ /*二分法查找数组的元素(有序的数组),返回的是元素的下标,binarySearch(arr,fromIndex,toIndex,key)
*a - 要搜索的数组
key - 要搜索的值
*/
int[] arr = {1,2,4,5,7,8};
int a = Arrays.binarySearch(arr,4);//找4的索引
System.out.println("要找的值的位置为:"+a);
}
}
5.3数组的复制
import java.util.Arrays;
public class Test01{
public static void main(String[] args){
//数组的复制
int[] arr = {1,3,4,6,8};
int[] newArr = Arrays.copyOf(arr,5);//复制到一个新数组
System.out.println(Arrays.toString(newArr)); //copyOfRange(arr,from,to) from:开始的位置(包含) to:目标位置(不包含) 含头不含尾 int[] newArr2 = Arrays.copyOfRange(arr,1,3);
System.out.println(Arrays.toString(newArr2)); //其中System也提供了赋值数组的方法。
//arraycopy(object str,int srcPos,object dest,int destPos,int length)
/*
*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,4);
System.out.println(Arrays.toString(arr2));
}
}
Java数组之二维数组的更多相关文章
- Java中的二维数组
Java 中的二维数组 所谓二维数组,可以简单的理解为是一种"特殊"的一维数组,它的每个数组空间中保存的是一个一维数组. 那么如何使用二维数组呢,步骤如下: 1. 声明数组并分配空 ...
- java学习之二维数组
java当中的二维数组,存储一组比较特殊的对象.他存储一个数组,同时存储的数组当中又存储着元素. java二维数组的声明方式一: class Arr2Demo { public static void ...
- java - day005 - 数组工具类, 数组复制,二维数组,变量,方法, 面向对象
1. java.util.Arrays 数组工具类 Arrays.toString (数组) 数组值链接字符串 Arrays.sort(数组) 基本类型: 优化的快速排序 引用类型: 优化的合 ...
- java基础5 (一维)数组和二维数组
本文知识点(目录): 一维数组(一维数组的概念.优点.格式.定义.初始化.遍历.常见异常.内存分析以及常见操作(找最大值.选择排序.冒泡排序等等)) 二维数组(二维数组的遍历.排序.查找.定义. ...
- JAVA生成一个二维数组,使中间元素不与相邻的9个元素相等,并限制每一个元素的个数
JAVA生成一个二维数组,使中间元素不与相邻的9个元素相等,并限制每一个元素的个数 示例如下 至少需要九个元素:"A","B","C",&q ...
- 【转】java中定义二维数组的几种写法
原文链接 注:以下的 type[][] var 也可以这样申明 type var[][] type为数组的类型,var为变量名 写法一:行列固定的数组 //定义二维数组写法1 class Test { ...
- Java中一维,二维数组的静态和动态初始化
今天我们要开始来讲讲Java中的数组,包括一维数组和二维数组的静态初始化和动态初始化 数组概述: 数组可以看成是多个相同类型数据的组合,对这些数据的统一管理; 数组变量属于引用数据类型,数组也可以看成 ...
- Java编程基础——数组和二维数组
Java编程基础——数组和二维数组 摘要:本文主要对数组和二维数组进行简要介绍. 数组 定义 数组可以理解成保存一组数的容器,而变量可以理解为保存一个数的容器. 数组是一种引用类型,用于保存一组相同类 ...
- 一维数组、二维数组——Java
一. 一维数组 1. 数组是相同类型数据的有序集合 相同类型的若干个数据,按照一定先后次序排列组合而成 每个数组元素可以通过一个下标来访问它们 其中,每一个数据称作一个数组元素 2. 数组特点: 其 ...
随机推荐
- 微信小程序换皮肤,动态切换菜单栏和导航栏的样式,动态修改TabBar和NavigationBar
在做微信小程序换皮肤的时候,需要动态修改菜单栏(TabBar)和导航栏(NavigationBar) 但是在小程序中它们的样式是写在app.json里面,而且app.json是静态编译,运行时哪怕你修 ...
- PHP开发API接口签名及验证
<?php // 设置一个密钥(secret),只有发送方,和接收方知道 /*----发送方和接收方- start ----*/ $secret = "28c8edde3d61a041 ...
- mysql性能监控软件pmm
具体配置操作步骤:1.在vmware或者virtualbox上安装centos镜像,可以选择阿里巴巴的镜像,下载速度快 centos7 修改yum源为阿里源,某下网络下速度比较快 首先是到yum源设置 ...
- 网页布局之flex
Flex是Flexible Box的缩写,意为“弹性布局”,用来为盒状模型提供最大的灵活性.设为Flex布局以后,子元素的float.clear和vertical-align属性将失效.使用flex ...
- web学习路线
- (95)Wangdao.com_第二十八天_进度事件
进度事件 进度事件 用来描述资源加载的进度, 主要由 AJAX 请求.<img>.<audio>.<video>.<style>.<link> ...
- chrome 安装setupvpn 解决chorme未能成功加载扩展程序的问题
一: vpn文件 https://pan.baidu.com/s/1wZV2HAC3GHlh1bjlvbilRg 提取码: gz72; 二 : 安装步骤 ------请看完以下步骤,不要直接拖 ...
- org.apache.ibatis.binding.BindingException: Parameter 'start' not found. Available parameters are [1, 0, param1, param2]
DEBUG 2018-05-30 08:43:26,091 org.springframework.jdbc.datasource.DataSourceTransactionManager: Roll ...
- Hibernate用注解方式实现一对多、多对多关系
一.一对多关系 1.在上一篇日志中用.xml配置文件项目基础上,再往lib目录先添加一个包-hibernate-jpa-2.0-api-1.0.0.Final.jar 2.新建一个com.st.bea ...
- Eclipse中 maven 工程 pom 文件 出错
解决: 在<plugins> 外层 添加 <pluginManagement> No marketplace entries found to handle mybati ...