数组
数组的基本概念
数组:相同类型的元素的集合(一个数组中可以存储多个值)
特点:数组内部可以划分为多个空间,且这些空间是连续的,一旦空间数量确定就不能更改
数组是一个非常重要的数据结构
java中的数组是引用类型,属于对象(与基本类型有区别)
数组中可以存储基本类型,也可以存储引用类型,取决于声明数组时,可以存储的数据类型
数组的创建
数组创建的三种方式
(1)声明数组的同时,根据指定长度分配内存空间,但数组中元素都为默认的初始化值
/*
数组声明语法:
数组类型 名称[]
数据类型 [] 名称; 常用
*/
//int a,d[];//a只是一个int整数,d表示数组
//int [] b,c;//b,c都表示数组
/*
创建数组1
*/
int[] a=new int[5];//数组创建 必须指定长度
//System.out.println (a);//[I@1b6d3586 默认输出是数组在内存中的地址
System.out.println (Arrays.toString ( a ));//Arrays.toString ( a )将数组中的元素拼接成字符串表示
char[] c=new char[5];
System.out.println (Arrays.toString ( c ) );
float[] f=new float[5];
System.out.println (Arrays.toString ( f ) );
String[] s=new String[5];
System.out.println (Arrays.toString ( s ) );
// int b=10;
// System.out.println (Integer.toHexString ( 460141958 ) );
(2)创建数组的同时,为数组的每个空间赋值,同时也确定了数组的长度
/*
数组创建2
*/
int []x=new int[]{1,2,3,4,5,6,7};//直接赋值
System.out.println (Arrays.toString ( x ) );
(3)隐式创建
/*
数组创建3
*/
int[]y={1,2,3,4,5,6,7};
System.out.println (Arrays.toString ( y ) );
数组元素的访问
数组在创建之初,会给每个空间分配编号(索引/下标)
通过编号可以对某个空间进行访问
索引(编号)特点:
整数(int)
从0开始
最大的索引 数组长度-1
int [] a=new int[5];
System.out.println (a.length );//数组长度
a[0]=10;
a[1]=5;
a[2]=3;
a[3]=20;
a[4]='c';
//a[5]=30; //此时出现了运行时异常,数组溢出
System.out.println ( Arrays.toString ( a ) );
数组元素的遍历
int []a={1,2,3,4,5};
for (int i = 0; i <a.length ; i++)
{
System.out.println (a[i]);
}
增强for循环
/*
a:需要遍历的数组
int t:声明一个变量
每循环一次,从数组中取出一个元素,赋给变量t,进入到循环体,重复操作,直到数组中元素遍历完成
*/
for(int t:a)
{
System.out.println (t );
}
数组排序
冒泡排序
每一次取出相邻的两个元素进行比较,把较大的值向后移动,
例如:
5,4,3,2,1
4 3 2 1 5
3 2 1 4 5
2 1 3 4 5
1 2 3 4 5
public static void main(String[] args) {
int[] a ={5,4,3,2,1};
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]){
int t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
System.out.println ( Arrays.toString ( a ) );
}
选择排序
假设第一个元素最大值,与之后的每一个位置上的元素进行比较,满足条件交换位置
int []a={5,4,3,2,1};
for (int i = 0; i <a.length-1 ; i++) {
for (int j = i+1; j < a.length; j++) {
if(a[i]>a[j]){
int t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
System.out.println ( Arrays.toString ( a ) );
选择排序的优化(减少交换的次数)
public class Xuanze {
public static void main(String[] args) {
int [] a = {4,5,2,3,1};
for (int i = 0; i < a.length-1; i++) {
int minIndex = i;
for (int j = i+1; j < a.length; j++) {
if(a[minIndex]<a[j]){
minIndex=j;//记录最小值的位置
}
if(a[i]>a[j]){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
System.out.println(Arrays.toString(a));
}
}
二维数组
二维数组的概念
二维数组(多维数组):数组中的每一个元素又是一个数组。
二维数组的创建
public static void main(String[] args) {
/*
二维数组:
数组的数组
二维数组中的每一个元素又是一个一维数组
声明语法:
int[][]a;
int a[][];
*/
//创建二维数组{{0,0,0},{0,0,0},{0,0,0}}
//创建了一个长度为3的二维数组,二维数组里面的每一个一维数组长度是3
int[][]a=new int[3][3];
System.out.println ( a[1][2]);
int [][]b=new int[][]{{101,80,70,60},{102,80,70,60},{103,80,70,60}};
int[][]c={{101,80,70,60},{102,80,70,60},{103,80,70,60}};
//{null,null,null}
//{{1,2,3,4},{0,0},{0,0,0,0,0}}
//此种情况,只创建了二维数组,里面的一维数组为null
int[][]d=new int[3][];
d[0]=new int[]{1,2,3,4};
d[1]=new int[2];
d[2]=new int[5];
//System.out.println ( d[1][2]);
int[][]x =new int[][]{{101,80,70,60},{102,80,70,60},{103,80,70,60}};
//二维数组的遍历
for (int i = 0; i < x.length; i++) {
for (int j = 0; j < x[i].length; j++) {
System.out.print(x[i][j]+" ");
}
System.out.println ( );
}
}