数组
数组的基本概念
数组:数组是相同数据类型元素的集合;
数组是引用类型数据,即对象;
可以存储基本数据类型,也可以存储引用数据类型。
特点:在内存中的空间是连续的。
声明数组:int [ ]a;(建议使用)//int表示数组中存储的数据类型
int a[ ];
数组的创建
数组创建的三种方式
(1)声明数组的同时,根据指定的长度分配内存空间,但数组中元素都为默认的初始化值
import java.util.Arrays;
public class ArrayDemo1 {
public static void main(String[] args) {
int []a = new int[10];//创建数组时,必须为其指定长度,且长度一旦定义,就不能改变
//Arrays类中提供一个toString()以字符串总是输出数组中的内容
System.out.println(Arrays.toString(a));//[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
float []b = new float[10];
System.out.println(Arrays.toString(b));//[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
char []c = new char[10];
System.out.println(Arrays.toString(c));//[ , , , , , , , , , ]
boolean []d = new boolean[10];
System.out.println(Arrays.toString(d));//[false, false, false, false, false, false, false, false, false, false]
String []e = new String[10];
System.out.println(Arrays.toString(e));//[null, null, null, null, null, null, null, null, null, null]
}
}
(2)创建数组的同时,为数组的每个空间赋值,同时也确定了数组的长度
import java.util.Arrays;
public class ArrayDemo2 {
public static void main(String[] args) {
int []x = new int[]{2,3,1,4,5};
System.out.println(Arrays.toString(x));
}
}
(3)隐式创建
import java.util.Arrays;
public class ArrayDemo3 {
public static void main(String[] args) {
int []y = {2,3,1,4,5};
System.out.println(Arrays.toString(y));
}
}
创建数组,动态为数组赋值
数组索引:就是每一个空间的标号;是整数,最小为0,最大为长度-1.
public class ArrayDemo4 {
public static void main(String[] args) {
int []a = new int[10];
a[0]=1;//为数组指定的空间位置赋值
System.out.println(a[0]);
int []b={1,2,3,4,5};
for (int i = 0; i < b.length; i++) {
System.out.println(b[i]);//获得数组指定位置的值
}
//增强for循环
for(int t: b){
System.out.println(t);
}
/*int i每次循环声明一个变量,b是要遍历的数组;
每循环一次,从数组中依次取出一个元素,赋值给t*/
}
}
数组排序
冒泡排序
每次拿出两个相邻元素比较大小,满足条件则交换位置。
import java.util.Arrays;
public class Maopao {
public static void main(String[] args) {
int []a = {4,5,2,3,1};//1,2,3,4,5
int temp = 0;
/*外层循环控制循环次数 length-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]){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
System.out.println(Arrays.toString(a));
}
}
选择排序
import java.util.Arrays;
public class Xuanze {
public static void main(String[] args) {
int [] a = {4,5,2,3,1};
/*循环次数,取出从第0个到length-1个*/
for (int i = 0; i < a.length-1; i++) {
/*循环找到比较的数,从i+1到最后一个*/
for (int j = i+1; j < a.length; j++) {
if(a[i]>a[j]){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
System.out.println(Arrays.toString(a));
}
}
选择排序的优化(减少交换的次数):
import java.util.Arrays;
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));
}
}
二维数组
二维数组的概念
二维数组(多维数组):数组中的每一个元素又是一个数组。
二维数组的创建
import java.util.Arrays;
public class Demo1 {
public static void main(String[] args) {
int [][] a = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
/*二维数组的遍历*/
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
System.out.print(a[i][j]+" ");
}
}
int [][] b = new int[3][4];//3表示二维数组长度(里面有几个一位数组);4表示一维数组长度;{{0,0,0,0},{0,0,0,0},{0,0,0,0}}
System.out.println(Arrays.toString(b));
int [][] c = new int[3][];//表示二维数组长度为3,里面一维数组为null,没有创建,运行时根据需要创建一维数组
a[0] = new int[4];
a[1] = new int[5];
a[2] = new int[10];
System.out.println(Arrays.toString(c));
}
}