目录
数组的基本概念与作用
数组是存储相同类型数据的集合;
数组是引用类型(对象),可以存储多个值;数组既可以存储基本数据类型,也可以存储引用数据类型;
数组的声明与创建
数组声明的两种方式:
1.数据类型 [ ] 数组名字;例如:int [ ] a;
2.数据类型 数组名字 [ ]; 例如:int a [ ] ;
注:推荐使用第一种,第二种方式有歧义,例如:int a ,b[ ] ;
数组创建的三种方式:
1.声明数组的同时,根据指定的长度分配内存,但数组中元素值默认为初始化值;
int [ ] ary0 = new int [10];
2.声明数组并分配内存,同时将其初始化;
int [ ] ary1 = new int [ ]{1,2,3,4,5};
3.与前一种方式相同,仅仅是语法相对简略;
int [ ] ary2 = {1,2,3,4,5};
从另一个角度出发,数组可分为动态和静态两种:
1.动态创建数组(没有为元素赋值,可以结合for循环进行赋值)
char [ ] chAry = new char[10];
2.静态创建数组,在创建的时候,即为每个元素赋除值;
int [ ] ary1 = new int [ ]{1,2,3,4,5};
注:创建数组时,必须明确数组容量,一旦确定,不能更改;
Arrays.toString-------->把数组以字符串的形式输出,方便调用;
import java.util.Arrays;
import java.util.Scanner;
public class Demo3 {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
//数组的创建,必须明确数组容量,一旦创建,不能更改
int[]a=new int[5];//推挤,int[]a,b(a,b都为数组)
int b[]=new int[10];//不推荐,int a,b[](有歧义)
int []c=new int[5];
double []d=new double[5];
char []ch=new char[5];
int []f=new int[]{1,2,3,4,5};//为数组赋值时,容量由值的个数决定,不用再注明容量;
String [] str =new String[5];
System.out.println(Arrays.toString(a));//Arrays.toString把数组以字符串的形式输出,便于调用;
System.out.println(Arrays.toString(b));
System.out.println(Arrays.toString(c));//int型默认0
System.out.println(Arrays.toString(d));//double型默认0.0
System.out.println(Arrays.toString(ch));//char型默认空格
System.out.println(Arrays.toString(str));//String型默认为null
}
}
数组的长度:
length 属性;
int [ ] b1 = new int [ ]{1,2,3,4,5,6,7};
System.out.println(b1.length);
注:数组长度有限制,最大也就时int的最大值;
数组的访问与迭代
数组元素的访问:
数组名[索引] 例如:a[0] a[1];
索引(index)特点:
1.从0开始;
2.数据类型是整形;
3.索引最大值和数组长度始终相差1;
import java.util.Scanner;
import java.util.Arrays;
public class Demo4 {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int []a=new int [10];
for(int i=0;i<a.length;i++){//a.length获取数组的长度
a[i]=sc.nextInt();//a[-1]索引越界;索引特点:整数、索引=数组长度-1;
}
System.out.println(Arrays.toString(a));//使用Arrays.toString()时需加上方法调用;
}
}
数组迭代的两种方式:
int [ ]b1 = new int [ ]{1,2,3,4,5};
1.for循环
for(int i=0;i<b1.length;i++){//第一种,for循环
System.out.println(a[i]);
}
2.增强for循环
for(数组元素类型 临时变量名 :数组名){
System.out.println(临时变量名);
}
例如:
for(int t:a){//第二种,增强for循环;
System.out.println(t);
}
import java.util.Scanner;
public class Demo5 {
public static void main(String[] args){
Scanner sc = new Scanner (System.in);
int []a=new int [5];
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
a[4] = 5;
int max=a[0];
//两种遍历方法;各有利弊!
// for(int i=0;i<a.length;i++){//第一种,for循环
// System.out.println(a[i]);
// }
// for(int t:a){//第二种,增强for循环;
// System.out.println(t);
// }
//输出数组中最大的数;
for(int j=0;j<a.length-1;j++){
if(max<=a[j+1]){
max=a[j+1];
}
}
System.out.println(max);
}
}
数组排序
冒泡排序
import java.util.Arrays;
public class Demo6 {
public static void main(String[] args){
//冒泡排序法;
int []a=new int[]{5,4,3,2,1};
//4 5 3 2 1
//4 3 5 2 1
//....
//4 3 2 1 5
//3 2 1 4 5
//2 1 3 4 5
//1 2 3 4 5
int temp;
for(int i=0;i<a.length-1;i++){
for(int j=0;j<a.length-1-i;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(a));
}
}
选择排序
import java.util.Arrays;
public class Demo6 {
public static void main(String[] args){
int []a=new int[]{5,4,3,2,1};
int temp;
//选择排序法;
//5 4 3 2 1
//4 5 3 2 1
//3 5 4 2 1
//2 5 4 3 1
//1 5 4 3 2
//......
for(int i=0;i<a.length-1;i++){
for(int j=i+1;j<a.length;j++){
if(a[i]>a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
System.out.println(Arrays.toString(a));
}
}