数组按用途可分为一维数组、二维数组和多维数组。
1、数组的定义:
在Java中,关键字new用于创建数组对象,在声明数组的同时分配内存空间。 定义数组的三种方式:
方法一(推荐,可以更好的指明数组类型)
type[] 变量名 = new type[数组中元素的个数];
例如:
int[] a = new int[10];
数组名,即引用a,指向数组元素的首地址。
方法二(同C语言)
类型变量名[] = 新类型[数组中元素的个数];
喜欢:
int a[] = new int[10];
方法三:定义时直接初始化
type[] 变量名 = new type[]{逗号分隔的初始化值};
其中new type[]可以省略,所以有两种:
int[] a = {1,2,3,4};
int[] a = new int[]{1,2,3,4};
上面的int[] a = new int[]{1,2,3,4}中java string转list集合,list集合转成数组,第二个方括号中不能加上数组的长度,因为元素个数是由后面大括号的内容决定的大括号。
数组的元素通过索引访问。 数组索引从0开始,所以索引值是从0到array.-1(array.是数组的长度,上例中a是数组)。
2.数组操作:
① 作业:
以下语句首先声明一个数组变量,然后创建一个包含 10 个该类型元素的数组,并将其引用分配给该变量。
班级 {
void main([] args){
// 数组大小
= 10;
// 定义数组
[] = 新的 [尺寸];
[0] = 5.6;
[1] = 4.5;
[2] = 3.3;
[3] = 13.2;
[4] = 4.0;
[5] = 34.33;
[6] = 34.0;
[7] = 45.45;
[8] = 99.993;
[9] = 11123;
// 计算所有元素的总和
总计 = 0;
for(inti = 0; i < size; i++){
总计 += [i];
}
.out.("总和为:" + total);
}
}
下图描述了数组。 这里数组中有 10 个元素,下标从 0 到 9。
②循环数组(遍历):
数组的元素类型和数组的大小是确定的,所以在处理数组元素时,我们通常使用基本的循环或循环。
使用基本循环创建、初始化和操作数组:
班级 {
void main([] args){
[] = {1.9, 2.9, 3.4, 3.5};
// 打印所有数组元素
for(inti = 0; i < .; i++){
.out.([i] + "");
}
// 计算所有元素的总和
= 0;
for(inti = 0; i < .; i++){
总计 += [i];
}
.out.("总计为" + 总计);
// 找到最大的元素
= [0];
for(inti = 1; i < .; i++){
如果([i] > 最大值){
最大值 = [i];
}
}
.out.("最大值为" + 最大值);
}
}
对于循环,可以在没有下标的情况下迭代数组:
班级 {
void main([] args){
[] = {1.9, 2.9, 3.4, 3.5};
// 打印所有数组元素
为了( : ){
。出去。();
}
}
}
③数组排序(介绍几种常用的排序方法):
1、冒泡排序(依次比较两个相似的数,提取最大值或最小值进行排序)
空白 () {
int a[]={32,87,3,58,12,70,20,8,62,17};
整数 n = a.;
对于 (int i = 0; i < n - 1; i++) {
对于 (int j = 0; j < n - 1; j++) {
如果 (a[j] > a[j + 1]) {
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = 温度;
}
}
}
对于(int c:a){
.out.(c);
}
}
2、选择排序(每次比较第一个数和后面的数,保存最大值的下标java string转list集合,list集合转成数组,然后调换位置进行排序)
空白 () {
int a[]={32,87,3,58,12,70,20,8,62,17};
整数 n = a.;
对于 (int i = 0; i < n - 1; i++) {
整数索引=我;
对于 (int j = i+1; j < n ; j++) {
如果(a[索引] < a[j]){
指数 = j;
}
}
如果(索引!=我){
int temp = a[i];
a[i] = a[索引];
a[索引] = 温度;
}
}
对于(int c:a){
.out.(c);
}
}
3.插入排序(将当前待排序的元素插入到一个已排序的列表中。一个很形象的例子是右手抓起一张扑克牌,插入到左手拿着的已排序的扑克牌中。插入的最差运行时间sort是O(n2),所以不是最优排序算法。它的特点是简单,不需要额外的存储空间,在元素少的时候效果很好)
空白 () {
int a[]={32,87,3,58,12,70,20,8,62,17};
整数 n = a.;
对于 (int i = 1; i < n; i++) {
//将a[i]插入a[0:i-1]
int t = a[i];
诠释j;
对于 (j = i - 1; j >= 0 && t < a[j]; j--) {
a[j + 1] = a[j];
}
a[j + 1] = t;
}
对于(int c:a){
.out.(c);
}
}
4.另一种方式是直接使用.sort()方法进行排序
无效排序(){
int a[]={32,87,3,58,12,70,20,8,62,17};
排序(一);
对于(int c:a){
.out.(c);
}
}