一维数组
import java.util.Arrays;
public class ArraysDemo
{
public static void main(String[] args)
{
//1.声明数组(只声明了变量a,并没有将a初始化为一个数组) 等价于 int a[];
int[] a;
/*2.声明并创建数组
创建一个数字数组时,所有的元素都默认初始化为0
创建一个boolean型数组时,所有的元素都默认初始化为false
创建一个char型数组时,所有的元素都默认初始化为'\0'
创建一个对象数组时,所有的元素都默认初始化为null
*/
int n=4;
int[] b=new int[10];
boolean[] c=new boolean[n]; //数组长度可以是变量
char[] ch=new char[5];
String[] str=new String[5];
float[] d=new float[0]; //允许长度为0:编写结果为数组的方法,如果结果为空时使用,
for(int i=0;i<b.length;i++)
System.out.print(b[i]+" ");
System.out.println();
for(int i=0;i<c.length;i++)
System.out.print(c[i]+" ");
System.out.println();
for(int i=0;i<ch.length;i++)
System.out.print(ch[i]+"_");
System.out.println();
for(int i=0;i<str.length;i++)
System.out.print("str["+i+"]="+str[i]+" ");
System.out.println();
> 运行结果**************************************
0 0 0 0 0 0 0 0
false false false false
_ _ _ _ _
str[0]=null str[1]=null str[2]=null str[3]=null str[4]=null
> *********************************************
//3.创建并初始化数组
int[] arr1={1,2,3,4,5}; //数组的大小就是初始值的个数
//4.匿名数组
arr1=new int[]{5,6,7,8,9,10}; //可以在不创建变量的情况下重新初始化一个数组
//5.数组的遍历
//5.1 for循环
System.out.print("数组arr1=");
for(int i=0;i<arr1.length;i++)
System.out.print(arr1[i]+" ");
System.out.println();
/*5.2 foreach循环:用来一次处理数组中的每个元素
for(变量:数组或实现Iterable接口的类对象)
{
语句块
}
*/
System.out.print("数组arr1=");
for(int temp:arr1) //temp变量用于暂存集合中的每一个元素
System.out.print(temp+" ");
System.out.println();
//5.3 打印数组的所有值(Arrays类的toString()方法):返回包含数组中数据元素的字符串,这些数据元素被放在括号内,并用逗号分隔
System.out.println("数组arr1="+Arrays.toString(arr1));
> 运行结果**************************************
数组arr1=5,6,7,8,9,10
数组arr1=5,6,7,8,9,10
数组arr1=[5, 6, 7, 8, 9, 10]
> *********************************************
//6.拷贝数组
//6.1 将一个数组变量拷贝给另一个数组变量
int[] arr2=arr1; //这是arr1和arr2将同时引用同一个数组
System.out.println("arr1[0]="+arr1[0]);
arr2[0]=100;
System.out.println("数组arr2="+Arrays.toString(arr2));
System.out.println("arr1[0]="+arr1[0]);
//6.2 将一个数组所有值拷贝到一个新的数组中(Arrays类的copyOf()方法)
//6.2.1 拷贝后的数组等于原数组长度
int[] arr3=Arrays.copyOf(arr2,arr2.length); //第二个参数是新数组的长度
System.out.println("arr2[0]="+arr2[0]);
arr3[0]=99;
System.out.println("数组arr3="+Arrays.toString(arr3));
System.out.println("arr2[0]="+arr2[0]);
/*6.2.2 Arrays.copuOf()方法常被用来增加(或减少)数组的大小
如果新数组的长度比原数组大,多余的元素数值型赋值为0,boolean型赋值为false
如果新数组的长度比原数组小,只拷贝前面的数组元素
*/
int[] arr4=Arrays.copyOf(arr2,arr2.length*2);
System.out.println("数组arr4="+Arrays.toString(arr4));
int[] arr5=Arrays.copyOf(arr2,arr2.length/2);
System.out.println("数组arr5="+Arrays.toString(arr5));
//6.2.3 Arays.copyOfRange(type[] a,int start,int end):拷贝数组从下标start(包含这个元素)开始到下标end(不包含这个值)结束的数组元素、新数组大小为end-start
int[] arr6=Arrays.copyOfRange(arr2,1,3); //第三个参数如果大于arr2的数组大小,则多余的数组元素为0或false
System.out.println("数组arr6="+Arrays.toString(arr6));
> 运行结果*************************************
arr1[0]=5;
数组arr2=[100, 6, 7, 8, 9, 10]
arr1[0]=100;
arr2[0]=100
数组arr3=[99, 6, 7, 8, 9, 10]
arr2[0]=100
数组arr4=[100, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0]
数组arr5=[100, 6, 7]
数组arr6=[6, 7]
> *********************************************
//7.数组排序(Arrays类中的sort方法):优化的快速排序算法
int[] ar1={34,66,78,45,8};
Arrays.sort(ar1);
System.out.println("数组ar1="+Arrays.toString(ar1));
> 运行结果**************************************
数组ar1=[8, 34, 45, 66, 78]
> *********************************************
/*8.二分查找
8.1 static int binarySearch(type[] a,type v)
8.2 static int binarySearch(type[] a,int start,int end,type v) (查找包含start,不包含end)
返回值:成功返回数组下标值,否则返回一个负数值r.-r-1是插入v后数组任然有序的位置
*/
int[] ar2={-14,-2,0,3,5,11,17,23,45,55,100};
System.out.println("5的下标为:"+Arrays.binarySearch(ar2,5));
int i=Arrays.binarySearch(ar2,6);
if(i<0)
System.out.println("没有找到!"+i);
//System.out.println("17的下标为:"+Arrays.binarySearch(ar2,4,10)); //在jdk8中不可用
> 运行结果**************************************
5的下标为:4
没有找到!-6
> *********************************************
//9.其他方法
//9.1 将数组的所有数据元素设置为v static void fill(type[] a,type v)
float[] ar3={1.2f,3.5f,7.8f,33.4f,56.8f};
Arrays.fill(ar3,1.1f);
System.out.println("数组ar3="+Arrays.toString(ar3));
/*9.2 判断数组是否相等
如果两个数组大小相同,并且下标相同的元素都对应相等.则返回true,否则返回false
static boolean equals(type[] a,type[] b)
*/
System.out.println("两个匿名数组是否相等:"+Arrays.equals(new int[]{1,2,3},new int[]{1,2,3}));
> 运行结果**************************************
数组ar3=[1.1, 1.1, 1.1, 1.1, 1.1]
两个匿名数组是否相等:true
> *********************************************
}
}
多维数组
java实际上没有多维数组,只有一维数组,二维数组int a[n][m]实际上是一个包含n个元素的数组,而每个元素又是由m个int类型构成的数组
import java.util.Arrays;
public class ArraysDemo
{
public static void main(String[] args)
{
//声明创建初始化方式和一维数组类似
//1. 二维数组的遍历
int[][] a={
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
};
//1.1 foreach方式
System.out.println("数组a=");
for(int[] row: a)
{
for(int temp:row)
System.out.print(temp+" ");
System.out.println();
}
//快速的打印一个二维数组的数据元素列表 Arrays.deepToString()方法
System.out.println("数组a="+Arrays.deepToString(a));
//2.不规则数组:数组的每一行都有不同的长度
//2.1 构造一个不规则数组
int[][] arr1=new int[5][]; //该二维数组含有5行
for(int i=0;i<arr1.length;i++)
{
arr1[i]=new int[i+1];
}
for(int i=0;i<arr1.length;i++)
{
for(int j=0;j<arr1[i].length;j++)
System.out.print(arr1[i][j]+" ");
System.out.println();
}
for(int[] i:arr1)
{
for(int j:i)
System.out.print(j+" ");
System.out.println();
}
System.out.println(Arrays.deepToString(arr1));
}
}