Java基础2-数组
数组
一种重要的数据结构,是用来存储同一类型的集合,通过整型下标访问数据;
//创建一个可以存储100个整数的数组
int[] a=new int[100];//两种方式创建,推荐第一种
int[] a;
int a[];//使用for循环来为数组赋值
for(int i=0;i<100;i++)a[i]=i;
数组的大小一旦创建不再改变,如果想在运行过程中扩展数组大小,就应该使用另一种数据结构——数组列表(array list)。
初始化方式与匿名数组
在Java中,提供了一种创建数组对对象同时赋予初始值的简化书写形式。下面是一个例子:
int[] smallPrimes = { 2, 3, 5, 7, 11, 13 };
注意,在使用这种语句时,不需要显式用 new
。
甚至还可以初始化一个匿名的数组:
new int[] { 1, 19, 23, 29, 31, 37 };
这表示将创建一个新数组并利用数字中提供的值进行初始化,数组的大小就是初始化的个数。使用这种语法形式可以在不创建新变量的情况下直接初始化一个数组。例如:
smallPrimes = new int[] { 1, 19, 23, 29, 31, 37 };
这是以下语句的简写形式:
int[] anonymous = { 17, 19, 23, 29, 31, 37 };
smallPrimes = anonymous;
For each循环
for(variable : collection) statement;//比如:
for(int element : array){System.out.println(element);
}
可用于:
- 遍历数组 (如
int[]
,String[]
等)。 - 遍历实现了
Iterable
接口的集合类(如List
,Set
等)。
但要注意 在增强 for
循环中,变量是只读的,无法修改原始数组或集合的元素。如果需要修改,必须使用普通的 for
循环;并且增强 for
循环无法直接访问当前元素的索引。如果需要索引,通常需要使用传统的 for
循环。
数组拷贝
可以将一个数组变量拷贝给另一个数组变量,两个变量将指向同一个数组。
//a和b都指向同一个数组
int[] b=a;
如果要将数组的所有值拷贝到新数组去,用到Arrays
类的copyOf
方法:
//第二个参数是新数组的长度,通常用来增加数组的大小
int[] b=Arrays.copyOf(a,2*a.length);
//a数组的结果为1、3、5;b数组的结果打印为1、3、5、0、0、0
如果数组元素是数值型,多余的元素将被赋值为0;如果是布尔型,则将赋值为false
,如果长度小于原始数组,则只拷贝前面部分的数据元素。
Java SE 6之前,数组拷贝是用的System类的arraycopy
方法
System.arraycopy(from,fromIndex,to,toIndex,count);
命令行参数
每一个Java应用程序都有一个带String arg[]
参数的main方法,表明将会接收一个字符串数组,我们叫做命令行参数。用-g
参数使用。
数组排序
Java里要想对数值型数组进行排序,可以不用自己完成排序逻辑,而是直接使用Arrays
类中的sort
方法
int[] a=new int[10000];
for(){//赋值
}
...
//使用优化的快速排序算法,默认是升序
Arrays.sort(a);
还包含了许多API,参数可以是自定义的一个比较器:
多维数组
声明
//声明1
int[][] aa=new int[5][5];
//声明2
int[][] bb={{16,3,2},{44,23,11},{6,9,32}
};
更高维的类似。
调用API时规则稍有变化,详见API文档。
不规则数组
其实所有的Java数组,不管是多维的还是不规则的,都可以被视作一位数组,本质上没有多维数组,多维数组可以被解释为**“数组的数组”**,下面的不规则数组也可以被视为一维数组,每一行是一个元素,长度不同罢了。
数组,不管是多维的还是不规则的,都可以被视作一位数组,本质上没有多维数组,多维数组可以被解释为**“数组的数组”**,下面的不规则数组也可以被视为一维数组,每一行是一个元素,长度不同罢了。
[外链图片转存中…(img-HkaaYNZX-1730296020925)]