不一样的数据–数组
导读
通过对本文的阅读,可以了解如下信息:
- 知道一维数组的声明和初始化
- 了解一维数组的一些操作,包括Arrays类中的一些方法
- 了解多维数组的声明和初始化(以二维数组为例)
数组的分类
在Java中,数组可以将相同类型的数据用一个标识符(标识符的详细介绍)封装在一起。数组大致可以分为以下两种:
- 一维数组
- 多维数组
一维数组的声明的格式
dataType[] arrayName;//首选
dataType arrayName[];
建议使用dataType[] arrayName这种格式,dataType arrayName[]这种格式是C/C++中的书写格式。
实例
public class Demo{
public static void main(String[] args){
int[] myList;
int myList2[];
}
}
这个代码只是做了数组两种声明方式。
创建一维数组
创建数组的格式有如下几种:
dataType[] arrayName;//声明
arrayName=new dataType[size];//这种方式需要先声明
dataType[] arrayName2=new dataType[size];//声明和初始化一起
dataType[] arrayName3={1,2,3,4,5};//声明并进行初始化
实例
public class Demo{
public static void main(String[] args){
int[] arrayName;
arrayName=new int[5];
int[] arrayName2=new int[5];
int[] arrayName3={1,2,3,4,5};
}
}
扩展:研究下声明和初始化的区别
只声明的实例
public class Demo{
public static void main(String[] args){
int[] arrayName;
System.out.println(arrayName);
}
}
运行结果
Demo.java:10: 错误: 可能尚未初始化变量arrayName
System.out.println(arrayName);
^
1 个错
然而初始化后的实例
import java.util.Arrays;
public class Demo{
public static void main(String[] args){
int[] arrayName;
arrayName=new int[5];
System.out.println(arrayName);
System.out.println(Arrays.toString(arrayName));
}
}
运行结果
[I@3764951d
[0, 0, 0, 0, 0]
这里输出的是数组的地址和默认初始化的值全是0,这里用的Arrays类来输出数组值,也可以通过循环来获取内部的数据。
结论:声明的时候,系统不会分配内存,只有初始化后才会分配相应的内存。
数组的操作
获取数组的长度
arrayName.length;//获取数组的长度
如何遍历数组
public class Demo{
public static void main(String[] args){
int[] arrayName={1,2,3,4,5};
for(int i=0;i<arrayName.length;i++){
System.out.println(arrayName[i]);
}
}
}
运行结果
1
2
3
4
5
通过循环以及下标来遍历数组。
数组的排序
import java.util.Arrays;
public class Demo{
public static void main(String[] args){
int[] arrayName={1,2,0,4,3};
Arrays.sort(arrayName);
System.out.println(Arrays.toString(arrayName));
}
}
运行结果
[0, 1, 2, 3, 4]
这里用的是Arrays类中的sort()方法来进行排序默认是按升序。
Arrays类还有其他的一些操作:
- 通过 fill 方法给数组赋值
- 通过 sort 方法给数组排序,按升序
- 通过 equals 方法比较数组中元素值是否相等
- 通过 binarySearch 方法能对排序好的数组进行二分查找法操作,查找数组元素
方法说明
方法说明 |
---|
public static void fill(int[] a, int val); 将指定的 int 值分配给指定 int 型数组指定范围中的每个元素。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。 |
public static void sort(Object[] a); 对指定对象数组根据其元素的自然顺序进行升序排列。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。 |
public static boolean equals(long[] a, long[] a2); 如果两个指定的 long 型数组彼此相等,则返回 true。如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。 |
public static int binarySearch(Object[] a, Object key); 用二分查找算法在给定数组中搜索给定值的对象(Byte,Int,double等)。数组在调用前必须排序好的。如果查找值包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。 |
实例
import java.util.Arrays;
public class Demo{
public static void main(String[] args){
//fill方法应用
int[] arrayName=new int[5];
Arrays.fill(arrayName,4);
System.out.println(Arrays.toString(arrayName));
//sort方法应用
int[] arrayName2={2,4,8,3,1,5};
Arrays.sort(arrayName2);
System.out.println(Arrays.toString(arrayName2));
//equals方法应用
boolean hhhh;
hhhh=Arrays.equals(arrayName,arrayName2);
System.out.println(hhhh);
//binarySearch方法应用
int b;
b=Arrays.binarySearch(arrayName2,8);
System.out.println(b);
}
}
运行结果
[4, 4, 4, 4, 4]
[1, 2, 3, 4, 5, 8]
false
5
多维数组
多维数组的声明格式(这里以二维数组为例)
type arrayName[][];
type [][] arrayName;
初始化
int arrayName[][]={{1,2},{2,3},{3,4,5}}; //静态初始化
int arrayName[][] = new int[2][3];//动态初始化
访问二维数组的元素
arrayName[i][j];
通过两个下标的形式来访问,二维数据表示的是矩阵,其中i代表行,j代表列
实例
public class Demo{
public static void main(String[] args){
int[][] arrayName={{1,2},{5,6,7},{3,4}};
for(int i =0;i<arrayName.length;i++){
for(int j=0;j<arrayName[i].length;j++){
System.out.print(arrayName[i][j]+" ");
}
System.out.println();
}
}
}
运行结果
1 2
5 6 7
3 4
操作数组有一些注意事项,下一篇会讲解数组的一些坑。。