//数组
/*
1.申明一个数组,在栈中创建
2.创建一个数组,在堆中创建,需要给定数组的长度
3.给数组赋值
*/
/*数组的特点
1.其长度是确定的。数组被创建。大小就不可以改变
2.其元素必须是相同类型,不能出现混合类型
3.数组中的元素可以是任何数据类型,包括基本类型和引用类型
4.数组变量属引用类型,数组也可以看成是对象,数组中每个元素相当于该对象的成员变量。
数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身在堆中
*/
public class Demo01 {
public static void main(String[] args) {
//变量类型[] 变量名字=值;
int[] num1;
int num2[];//和上面的效果相同
num1=new int[10];//定义可以保存十个数字
num1=new int[]{1,2,3,4,4,4,4,4,4};
//改变num1的长度而不改变它的元素
num2=new int[2*num1.length];
System.arraycopy(num1,0,num2,0,num1.length);
num1=num2;
System.out.println("num1的长度是:"+num1.length);
for (int a:num1){
System.out.print(a+" ");
}
}
}
数组初始化
//数组初始化
public class Demo02 {
public static void main(String[] args) {
//静态初始化 创建数组+赋值
int[] a={1,2,3,4};
//动态初始化 创建数组,后续赋值
int[] b=new int[10];//申明+创建
b[0]=1;
b[1]=2;
}
}
数组的使用
//数组使用
public class Demo03 {
public static void main(String[] args) {
int[] nums={1,2,3,4,5,6,99};
//打印所有的数组元素,for-each循环
for (int a:nums){
System.out.print(a+" ");
}
System.out.println("\n====================");
//数组作方法入参
printArray(nums);
System.out.println("\n====================");
//数组作返回值
int[] test=reserve(nums);
printArray(test);
}
public static void printArray(int[] c) {//打印数组
for (int b:c){
System.out.print(b+" ");
}
}
public static int[] reserve(int[] d){//反转数组
int[] result=new int[d.length];
for (int i=0,j=d.length-1;i<d.length;i++,j--){
result[i]=d[j];
}
return result;
}
}
多维数组
//多维数组 相当于数组里面保存了数组
public class Demo04 {
public static void main(String[] args) {
int [][] array={{0,1,2},{2,3},{4,5}};
printArray(array[0]);
printArray(array[1]);
printArray(array[2]);
}
public static void printArray(int[] c) {//打印数组
for (int b:c){
System.out.print(b+" ");
}
}
}
Arrays类学习
import java.util.Arrays;
//Arrays类学习
public class Demo05 {
public static void main(String[] args) {
int[] a={1,4422,214,5352,1141,21,42};
//打印数组元素 Arrays.toString
System.out.println(Arrays.toString(a));
//数组排序 Arrays.sort
Arrays.sort(a);
System.out.println(Arrays.toString(a));
//二分查找
System.out.println(Arrays.binarySearch(a,214));
//fill 用一个值填充所有的数
Arrays.fill(a,88);
System.out.println(Arrays.toString(a));
}
}
冒泡排序
import java.util.Arrays;
//冒泡排序
/*
1.两两比较遍历
2.效率低
*/
public class Demo06 {
public static void main(String[] args) {
int[] a={2,42,63,27,83,37,9};
bobSort(a);
System.out.println(Arrays.toString(a));
}
public static void bobSort(int[] a){
int test;
for (int i=0;i<a.length;i++){
for (int j=0;j<a.length-1;j++){
if (a[j]>a[j+1]){test=a[j];a[j]=a[j+1];a[j+1]=test;}
}
}
}
}
稀疏数组
//稀疏数组 用以压缩空间
/*
核心思想为记录有数据位的坐标和总个数
*/
public class Demo07 {
public static void main(String[] args) {
int[][] array=new int[11][11];
array[2][3]=23;
array[4][6]=46;
//打印原数组
for (int[] a:array){
System.out.println();
for (int b:a){
System.out.print(b+"\t");
}
}
System.out.println();
//计算出数组中有值的总个数
int sum=0;
for (int i=0;i<11;i++){
for (int j=0;j<11;j++){
if(array[i][j]!=0){
sum++;
}
}
}
System.out.println(sum);
//定义保存数组
int[][] array2=new int[sum+1][3];
//第一行为 原数组的行,列和有值的个数
array2[0][0]=11;
array2[0][1]=11;
array2[0][2]=sum;
//找出数据的位置和值
int x=1;
for (int i=0;i<11;i++){
for (int j=0;j<11;j++){
if(array[i][j]!=0){
array2[x][0]=i;
array2[x][1]=j;
array2[x][2]=array[i][j];
x++;
}
}
}
for (int o[]:array2){
for (int p:o){
System.out.print(p+" ");
}
System.out.println();
}
}
}