1、数组(Array)
1.1、概念
.
1.2、数组的创建
1.动态创建
int[] a=new int[5];//创建的数组有默认值 5是数组的长度,最大下标是4
2.静态创建
int[] a=new int[]{1,2,3,4,5};
int[] a={1,2,3,4,5};
1.3、练习:向数组中存入数据hello
package cn.tedu.Array;
import java.util.Arrays;
/**本类用于数组的创建和使用*/
public class TestCreateArray {
public static void main(String[] args) {
/**数组的下标从0开始,最大下标是数组的长度-1*/
//1.静态创建
char[] c1= {'h','e','l','l','o'};
char[] c2=new char[] {'h','e','l','l','o'};
//2.动态创建
char[] c3=new char[5];
c3[0]='h';
c3[1]='e';
c3[2]='l';
c3[3]='l';
c3[4]='o';
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
//3.创建一个String类型的数组
String[] s= {"a","b","c"};
/**关于数组的打印,char类型在底层做了处理,
可以直接打印数组中的具体值
但是除了char类型以外的数组需要打印元素内容需要借助数组工具类Arrays
* */
System.out.println(s);//[Ljava.lang.String;@6d06d69c
System.out.println(Arrays.toString(s));
//4.获取数组的长度
/**数组一旦创建,长度不可改变*/
System.out.println(c1.length);
System.out.println(s.length);
}
}
数组一旦创建,长度不可改变
除了char类型以外的数组需要打印元素内容需要借助数组工具类Arrays.toString();
1.4、 练习:数组的遍历
package cn.tedu.Array;
import java.util.Arrays;
import java.util.Random;
/**本类用于练习数组的遍历*/
public class TestArrayExec {
public static void main(String[] args) {
// m1();
m2();
m3();
}
private static void m3() {
int[] a=new int[10];
for(int i=0;i<=a.length-1;i++) {
a[i]=new Random().nextInt(10);
}
System.out.println(Arrays.toString(a));
}
private static void m2() {
int[] a=new int[10];
for(int i=0;i<=a.length-1;i++) {
a[i]=i+1;
}
System.out.println(Arrays.toString(a));
}
private static void m1() {
int[] a= {31,28,31,30,31,30,31,31,30,31,30,31};
//循环变量i代表数组的下标
for(int i=0;i<=a.length-1;i++) {
System.out.println((i+1)+"月有"+a[i]+"天");
}
}
}
2、数组工具类Arrays
2.1、Arrays的sort,toString方法
package cn.tedu.Array;
/**本类用于测试数组工具类Arrays的sort,toString方法*/
import java.util.Arrays;
public class TestArraysSort {
public static void main(String[] args) {
int[] a= {21,97,75,23,21};
Arrays.sort(a);
System.out.println(Arrays.toString(a));
}
}
2.2、练习:Arrays. copyOf(数组,新的长度)
本方法不会修改原数组,是创建了一个新的数组
package cn.tedu.Array;
import java.util.Arrays;
/**本类用于测试数组工具类的copyOf()*/
public class TestArraysCopyOf {
public static void main(String[] args) {
int[] from= {1,2,3,4,5};
int[] to=Arrays.copyOf(from, 5);
int[] to2=Arrays.copyOf(from, 3);//缩容
int[] to3=Arrays.copyOf(from, 7);//扩容
int[] to4=Arrays.copyOfRange(from, 2,4);//指定首尾截取:[2,4)
System.out.println(Arrays.toString(to));
System.out.println(Arrays.toString(to2));
System.out.println(Arrays.toString(to3));
System.out.println(Arrays.toString(to4));
}
}
3、冒泡排序
思路:
1、如果有n个数,最多比较n-1轮
2、每轮从头开始,之前比较出来的最大值不参与下一轮的比较
package cn.tedu.method;
import java.util.Arrays;
/**本类用于实现冒泡排序*/
public class BubbleSort {
public static void main(String[] args) {
int[] a= {27,96,73,25,21};
int[] b= {76,1,2,3,4};
sortArray(b);
}
private static int[] sortArray(int[] a) {
/**i代表的是比较的轮数,从1开始
* j代表的是数组的下标,从0开始*/
for(int i=1;i<=a.length-1;i++) {
boolean flag=false;
for(int j=0;j<a.length-i;j++) { //-i每轮比较出来的最大值,下一轮就不需要再参与比较
if(a[j]>a[j+1]) {
int t=a[j];
a[j]=a[j+1];
a[j+1]=t;
flag=true;
}
}
if(flag==false) {
return a;
}
System.out.println("第"+i+"轮比较的结果:"+Arrays.toString(a));
}
System.out.println(Arrays.toString(a));
return a;
}
}