Java数组
1 什么是Java数组
通常,数组是具有连续存储位置的相似类型元素的集合。
Java数组是一个对象,其中包含相似数据类型的元素。此外,数组的元素存储在连续的存储位置中。Java数组是一个数据结构,我们在其中存储相似的元素。但注意的是,我们只能在Java数组中存储一组固定的元素。
Java中的数组是基于索引的,数组的第一个元素存储在第0个索引,第二个元素存储在第一个索引,依此类推。
与C/C ++不同,我们可以使用length属性来获取数组的长度。而在C/C ++中,是使用sizeof运算符。
在Java中,数组是动态生成的类的对象。Java数组继承了Object类,并实现了Serializable以及Cloneable接口。我们可以将原始值或对象存储在Java数组中。像C/C ++一样,我们也可以在Java中创建一维或二维数组。
而且,Java提供了匿名数组的功能,而在C/C ++中是没有匿名数组的。
2 Java数组的优点
- 代码优化:Java数组使代码得以优化,我们可以高效地检索或排序数据。
- 随机访问:我们可以获得位于索引位置的任何数据。
3 Java数组的缺点
- 大小限制:我们在数组中存储元素的数量是固定的。意味着Java数组不会在运行时增加其容量(不会自动扩容)。为了解决这个问题,在Java中使用了Collection集合,Collection可以自动扩容。
4 Java数组的类型
有两种类型的数组:
- 一维数组
- 二维数组
5 Java一维数组
用Java声明数组的语法:
dataType[] arr; (或者)
dataType []arr; (或者)
dataType arr[];
用Java实例化数组
arrayRefVar=new datatype[size];
6 Java一维数组的例子
让我们看一下Java数组的简单例子,我们将声明,实例化,初始化和遍历数组。
package com.yiidian;
/**
* 一点教程网:http://www.yiidian.com
*/
//声明、实例化,变量Java数组的例子
class Test{
public static void main(String args[]){
int a[]=new int[5];//声明数组
a[0]=10;//实例化
a[1]=20;
a[2]=70;
a[3]=40;
a[4]=50;
//遍历数组
for(int i=0;i<a.length;i++)//length属性可以获取数组的长度
System.out.println(a[i]);
}
}
输出结果为:
10
20
70
40
50
7 Java数组的声明、实例化和初始化
我们可以通过以下方式一起声明,实例化和初始化Java数组:
int a[]={33,3,4,5};//声明、实例化、初始化
让我们看一下打印此数组的简单例子。
package com.yiidian;
/**
* 一点教程网:http://www.yiidian.com
*/
//声明,实例化Java数组的例子
class Testarray1{
public static void main(String args[]){
int a[]={33,3,4,5};//声明、实例化、初始化数组
//打印输出数组元素
for(int i=0;i<a.length;i++)
System.out.println(a[i]);
}
}
输出结果为:
33
3
4
5
8 for-each遍历Java数组
我们还可以使用for-each循环打印Java数组。Java的for-each循环可以逐一打印数组元素。它在变量中包含一个数组元素,然后执行循环的主体。
for-each循环的语法如下:
for(data_type variable:array){
//循环体
}
让我们看一下使用for-each循环打印Java数组元素的例子:
package com.yiidian;
/**
* 一点教程网:http://www.yiidian.com
*/
//使用for-each循环遍历Java数组的例子
class Testarray1{
public static void main(String args[]){
int arr[]={33,3,4,5};
//使用for-each循环
for(int i:arr)
System.out.println(i);
}
}
输出结果为:
33
3
4
5
9 把Java数组作为方法参数
我们可以将Java数组作为方法的参数,以便我们可以在重用数组相同的逻辑。
让我们看一个简单的例子:
package com.yiidian;
/**
* 一点教程网:http://www.yiidian.com
*/
//把Java数组作为方法参数的例子
class Testarray2{
//创建一个接收Java数组参数的方法
static void min(int arr[]){
int min=arr[0];
for(int i=1;i<arr.length;i++)
if(min>arr[i])
min=arr[i];
System.out.println(min);
}
public static void main(String args[]){
int a[]={33,3,4,5};//定义和实例化数组
min(a);//传递数组参数
}
}
输出结果为:
3
10 Java匿名数组
Java支持匿名数组的功能,因此我们在将传递数组参数的时候,无需提前声明该数组。
package com.yiidian;
/**
* 一点教程网:http://www.yiidian.com
*/
//匿名数组的例子
public class Test{
//创建一个接收数组参数的方法
static void printArray(int arr[]){
for(int i=0;i<arr.length;i++)
System.out.println(arr[i]);
}
public static void main(String args[]){
printArray(new int[]{10,22,44,66});//传递匿名数组
}
}
输出结果为:
10
22
44
66
11 Java数组作为方法返回值
我们还可以在Java的方法返回值中返回一个Java数组。
package com.yiidian;
/**
* 一点教程网:http://www.yiidian.com
*/
//把Java数组作为方法返回值的例子
class Test{
//创建一个带有数组返回值的方法
static int[] get(){
return new int[]{10,30,50,90,60};
}
public static void main(String args[]){
//调用返回数组的方法
int arr[]=get();
//打印输出数组元素
for(int i=0;i<arr.length;i++)
System.out.println(arr[i]);
}
}
输出结果为:
10
30
50
90
60
12 ArrayIndexOutOfBoundsException下标越界
如果遍历数组时数组的长度为负数(等于数组大小或大于数组大小),则Java虚拟机(JVM)会抛出ArrayIndexOutOfBoundsException异常。
package com.yiidian;
/**
* 一点教程网:http://www.yiidian.com
*/
//引发ArrayIndexOutOfBounds异常的例子
public class Test{
public static void main(String args[]){
int arr[]={50,60,70,80};
for(int i=0;i<=arr.length;i++){
System.out.println(arr[i]);
}
}
}
输出结果为:
50
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
60
at com.yiidian.Test.main(Test.java:11)
70
80
13 Java二维数组
Java支持定义二维数组,数据以基于行和列的索引(也称为矩阵形式)存储。
Java声明二维数组的语法:
dataType[][] arrayRefVar; (或者)
dataType [][]arrayRefVar; (或者)
dataType arrayRefVar[][]; (或者)
dataType []arrayRefVar[];
实例化二维数组的例子:
int[][] arr=new int[3][3];//有3行3列
初始化二维数组的例子:
arr[0][0]=1;
arr[0][1]=2;
arr[0][2]=3;
arr[1][0]=4;
arr[1][1]=5;
arr[1][2]=6;
arr[2][0]=7;
arr[2][1]=8;
arr[2][2]=9;
14 Java二维数组的例子
让我们看一个简单的例子来声明,实例化,初始化和打印二维数组。
package com.yiidian;
/**
* 一点教程网:http://www.yiidian.com
*/
//Java二维数组的例子说明
class Test{
public static void main(String args[]){
//定义和初始化二维数组
int arr[][]={{1,2,3},{2,4,5},{4,4,5}};
//打印二维数组
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
}
输出结果为:
1 2 3
2 4 5
4 4 5
15 Java锯齿数组
如果我们在二维数组中创建奇数列,则称为锯齿数组。换句话说,它是一个包含不同列数数组的数组。
package com.yiidian;
/**
* 一点教程网:http://www.yiidian.com
*/
//锯齿数组的例子
class Test{
public static void main(String[] args){
//定义奇数列的锯齿数组
int arr[][] = new int[3][];
arr[0] = new int[3];
arr[1] = new int[4];
arr[2] = new int[2];
//初始化锯齿数组
int count = 0;
for (int i=0; i<arr.length; i++)
for(int j=0; j<arr[i].length; j++)
arr[i][j] = count++;
//打印锯齿数组元素数据
for (int i=0; i<arr.length; i++){
for (int j=0; j<arr[i].length; j++){
System.out.print(arr[i][j]+" ");
}
System.out.println();//换行
}
}
}
输出结果为:
0 1 2
3 4 5 6
7 8
16 获取Java数组的类名
在Java中,数组是一个对象。数组对象,将会创建一个代理类,该代理类的名称可以通过对象上的getClass()、getName() 方法获得。
package com.yiidian;
/**
* 一点教程网:http://www.yiidian.com
*/
//获取数组名称的例子说明
class Test{
public static void main(String args[]){
//定义和初始化数组
int arr[]={4,4,5};
//获取数组的对象名称
Class c=arr.getClass();
String name=c.getName();
//打印输出数组的对象名称
System.out.println(name);
}
}
输出结果为:
[I
17 拷贝Java数组
我们可以通过System类的arraycopy() 方法将一个数组复制到另一个数组。
arraycopy方法的语法:
public static void arraycopy(
Object src, int srcPos,Object dest, int destPos, int length
)
18 拷贝Java数组的例子
package com.yiidian;
/**
* 一点教程网:http://www.yiidian.com
*/
//从一个数组拷贝数据到另一个数组的例子
class TestArrayCopyDemo {
public static void main(String[] args) {
//定义一个数组
char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f', 'e', 'i', 'n', 'a', 't', 'e', 'd' };
//定义另一个数组
char[] copyTo = new char[7];
//从第一个数组拷贝到第二个数组
System.arraycopy(copyFrom, 2, copyTo, 0, 7);
//打印数组元素
System.out.println(String.valueOf(copyTo));
}
}
输出结果为:
caffein
19 克隆Java数组
由于Java数组实现了Cloneable接口,因此我们可以创建Java数组的克隆。如果我们创建一维数组的克隆,它将创建Java数组的深层副本。这意味着它将复制实际值。但是,如果我们创建二维数组的克隆,它将创建Java数组的浅表副本,这意味着它将复制引用。
package com.yiidian;
/**
* 一点教程网:http://www.yiidian.com
*/
//克隆Java数组的例子
class Test{
public static void main(String args[]){
int arr[]={33,3,4,5};
System.out.println("打印原始数组:");
for(int i:arr)
System.out.println(i);
System.out.println("打印克隆后的数组:");
int carr[]=arr.clone();
for(int i:carr)
System.out.println(i);
System.out.println("两个数组相等么?");
System.out.println(arr==carr);
}
}
输出结果为:
打印原始数组:
33
3
4
5
打印克隆后的数组:
33
3
4
5
两个数组相同么?
false
20 Java二维数组相加
让我们看一个简单的例子,将两个二维数组相加。
package com.yiidian;
/**
* 一点教程网:http://www.yiidian.com
*/
//将2个二维数组相加的例子
class Test{
public static void main(String args[]){
//创建2个二维数组
int a[][]={{1,3,4},{3,4,5}};
int b[][]={{1,3,4},{3,4,5}};
//创建另一个二维数组来存储相加的结果
int c[][]=new int[2][3];
//把二维数组相加,并存储到新数组中
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
c[i][j]=a[i][j]+b[i][j];
System.out.print(c[i][j]+" ");
}
System.out.println();//换行
}
}
}
输出结果为:
2 6 8
6 8 10
21 Java二维数组相乘
Java二维数组相乘的时候,第一矩阵的单行元素乘以第二矩阵的所有列,大家可以通过下图先理解这个过程:
让我们看一个简单的例子,将两个3行3列的二维数组相乘。
package com.yiidian;
/**
* 一点教程网:http://www.yiidian.com
*/
//2个二维数组相乘的例子
public class Test{
public static void main(String args[]){
//创建2个二维数组
int a[][]={{1,1,1},{2,2,2},{3,3,3}};
int b[][]={{1,1,1},{2,2,2},{3,3,3}};
//创建第3个数组来存储2个二维数组相乘的结果
int c[][]=new int[3][3]; //3行3列
//相乘
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
c[i][j]=0;
for(int k=0;k<3;k++)
{
c[i][j]+=a[i][k]*b[k][j];
}//结束内循环
System.out.print(c[i][j]+" "); //打印数组元素
}//结束外循环
System.out.println();//换行
}
}
}
输出结果为:
6 6 6
12 12 12
18 18 18
热门文章
优秀文章