JAVA笔记–数组
数组是由相同类型的若干项组成的一个数据集合,数组中的每个数据称为元素。
数组声明格式如下:
数据类型[] 标识符 推荐使用
或者
数据类型 标识符[]
一维数组
1、一维数组定义和初始化
int[] arr = new int[]{1,3,5,7,9};
或者
int[] arr = {1,3,5,7,9};
备注这两种方法之间没有任何区别。
public class ZachIntArray{
public static int[] arr1 = new int[]{1,3,5,7};
public static int[] arr2 = {2,4,6,8};
public static void main(String[] args)
{
int i = 0;
for(i = 0;i < arr1.length;i++){
System.out.println(arr1[i] + "|" + arr2[i]);
}
}
}
注意:
在给数组分配内存空间时,必须指定数组能够存储的元素来确定数组大小。创建数组之后不能修改数组的大小,可以使用length属性获取数组的大小。
2、数组作为函数的形参
class ChangeIt{
static void doIt(int[] z)
{
z = null;
}
}
public class ZachArray{
public static void main(String[] args){
int[] zachArray = {1,2,3,4,5};
ChangeIt.doIt(zachArray);
int i = 0;
for(i = 0; i < zachArray.length;i++){
System.out.print(zachArray[i] + " ");
}
System.out.println();
}
}
输出结果:
1 2 3 4 5
1、需要注意上面函数参数;
2、需要注意循环体重打印,加字符和加字符串的区别(单引号和双引号),结果会截然不同。
3、java基本数据类型传递参数时是值传递;引用类型传递参数是引用传递。然而数组对象虽然是引用传递,但是将引用z=null,只是将引用z不指向任何对象,并不会对原先指向的对象数据进行修改。
二维数组
1、二维数组的定义和初始化
int[][] array = {{1,2,3},{4,5,6}};
int[][] array = new int[][]{{1,2,3},{4,5,6}};//数组的个数由后面初始化的实体给出
几种错误的声明方式:
1、Cannot define dimension expressions when an array initializer is provided
int[][] myArray2 = new int[2][3]{{1,2,3},{4,5,6}};
错误原因:在声明的时候,不允许同时定义数组大小。
修改方案:int[][] myArray2 = new int[][]{{1,2,3},{4,5,6}};
2、Array constants can only be used in initializers
int[][] myArray3 = new int[2][3];
myArray3 = {{1,2,3},{4,5,6}};
错误原因:一次性赋值必须在数组定义的时候赋值,如错误一。
修改方案:
int[][] myArray3 = new int[2][3];
for(int ii = 0;ii < myArray.length;ii++){
for(int jj = 0;jj < myArray[0].length;jj++){
myArray3[i][j] = myArray2[i][j];
}
}
数组的使用:
1、遍历数组
方法一
int[][] myArray = {{1,2,3},{4,5,6}};
int i = 0,j = 0;
for(i = 0;i < myArray.length;i++){
for(j = 0;j < myArray[0].length;j++){
System.out.print(myArray[i][j] + " ");
}
System.out.println();
}
方法二
for(int[]x : myArray){
for(int z: x){
System.out.print(z + " ");
}
System.out.println();
}
2、fill方法
原型:
fill(int[]a, int value)
fill(int[]a, int fromIndex, int toIndex, int value)//include fromIndex, exclude toIndex
该方法可将指定的int值value分配给int型数组。
import java.util.Arrays;
public class ZachFill{
static void printIntArray(int[] a)
{
for(int i : a){
System.out.print(i + " ");
}
System.out.println();
System.out.println("--------------");
}
public static void main(String[] args)
{
int[] myArray = new int[]{1,3,5};
printIntArray(myArray);
Arrays.fill(myArray,9);
printIntArray(myArray);
}
}
3.sort方法
原型:
Array.sort(object);
public class ZachArray {
static void printIntArray(int[] a)
{
for(int i = 0;i < a.length;i++){
System.out.print(a[i] + " ");
}
System.out.println();
}
public static void main(String[] args)
{
int[] myArray = new int[]{23,14,27,48,31,20};
System.out.println("After Sort");
printIntArray(myArray);
Arrays.sort(myArray);
System.out.println("After Sort");
printIntArray(myArray);
}
}
4、数组复制 copy方法
原型:
copyOf(arr, int newArrayLength);
arr:要复制的数组,newArrayLength:新数组长度。
copyOfRange(arr,int fromIndex, int toIndex);
arr:要复制的数组,fromIndex:指定开始复制的下标(含),toIndex:指定结束复制的下标(不含)。
import java.util.Arrays;
public class ArrayCopy {
static void printIntArray(int[] z)
{
for(int x : z){
System.out.print(x);
}
System.out.println();
}
public static void main(String[] args)
{
int[] myArray = new int[]{1,3,5,7,9,2,4,6,8};
System.out.println("print myArray:");
printIntArray(myArray);
int[] copyMyArray = Arrays.copyOf(myArray,myArray.length);
System.out.println("print copyMyArray:");
printIntArray(myArray);
int[] partCopyMyArray = Arrays.copyOfRange(myArray, 1, 4);
System.out.println("print partCopyArray:");
printIntArray(partCopyMyArray);
}
}
数组排序
1、冒泡排序
class BubbleSort{
void printIntArray(int[] arr)
{
for(int x : arr){
System.out.print(x + " ");
}
System.out.println();
}
void sort(int[] arr)
{
int temp = 0;
for(int i = 1;i < arr.length;i++){
for(int j = 0;j < arr.length - i;j++){
if(arr[j] > arr[j + 1]){
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
}
2、直接排序
3、反转排序