> 文档中心 > Java数组(知识点+练习+扩展+算法)

Java数组(知识点+练习+扩展+算法)


  • 👨‍💻作者简介: 大家好,我是小火车~~,在校大二学生一枚
  • 🛳️个人主页: 嘟嘟嘟的小火车的博客
  • 📗系列专栏: 本文写在《java从0到1》专栏
  • ✉️如果文章知识点有错误的地方,请指正! 和大家一起学习一起进步🎈
  • 🔥如果觉得博主的文章还不错的话,请👍三连支持👍一下博主哦

java数组

    • 一.数组概述
    • 二.数组声明创建
    • 三.数组使用
    • 四.多维数组
    • 五.Arrays类
    • 六.稀疏数组
    • 七.扩展
      • 内存分析
      • 冒泡排序
    • 其他专栏

一.数组概述

  • 数组描述的是相同类型的若干个数据,按照一定的先后次序排列而成.

  • 每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们

数组的四个基本特点

  • 其长度是固定的.数组一旦被创建,它的大小就是不可以改变的

  • 其元素必须是相同类型,不容许出现混合类型

  • 数组中的元素可以是任何数据类型,包括基本类型,包括基本类型和引用类型

  • 组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量

    数组本身就是对象,Java对象是在堆中的,因此数组无论保持原始类型还是其他数据类型

二.数组声明创建

声明数组

datatype[] arrayRefVar;

int[] numbers;// 首选声明方法

datatype arrayRefVar[];

int numbers[];//也可以不推荐

创建数组

dataType[] arrayRefVar = new dataType[arraySize];

numbers = new int[5];

同时声明创建数组

int[] numbers = new int[5];
  • 数组的元素是通过索引访问的,数组索引从0开始.
  • 获取数组的长度: arrays.length

三种初始化

  • 静态初始化
int[] a = {1,2,3,4};
  • 动态初始化
numbers[0] = 1;numbers[1] = 2;numbers[2] = 3;numbers[3] = 4;numbers[4] = 5;
  • 默认初始化 int数组默认值为0

数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方法被隐式初始化.

int[] numbers = new int[10];numbers[0] = 1;numbers[1] = 2;numbers[2] = 3;numbers[3] = 4;numbers[4] = 5;System.out.println(numbers[5]);

数组边界

下标的合法区间:[0,length-1]

如果越界会报错:ArrayIndexOutBountsException:数组下标越界异常

练习 计算数组中元素的和

public class Demo01 {    public static void main(String[] args) {  int[] numbers = new int[5]; numbers[0] = 1; numbers[1] = 2; numbers[2] = 3; numbers[3] = 4; numbers[4] = 5; int sum = 0; for (int i = 0;i < numbers.length;i++){     sum += numbers[i]; } System.out.println(sum);    }}

三.数组使用

普通for循环

//练习 计算数组的和public class Demo01 {    public static void main(String[] args) {  int[] numbers = new int[5]; numbers[0] = 1; numbers[1] = 2; numbers[2] = 3; numbers[3] = 4; numbers[4] = 5; int sum = 0; for (int i = 0;i < numbers.length;i++){     sum += numbers[i]; } System.out.println(sum);    }}

For-Each循环

//练习 计算数组的和public class Demo02 {    public static void main(String[] args) { int[] arrays = {1,2,3,4,5}; for (int i : arrays) {     System.out.println(i); }    }}

数组作方法参数

//练习 打印数组元素public class Demo02 {    public static void main(String[] args) { int[] arrays = {1,2,3,4,5}; printArray(arrays);    }    public static void printArray(int[] arrays){ for (int i = 0;i < arrays.length;i++){     System.out.println(arrays[i]); }    }}

数组作返回值

//练习 将数组元素顺序倒置public class Demo03 {    public static void main(String[] args) { int[] arrays = {1,2,3,4,5}; printArray(reverse(arrays));    }    public static int[] reverse(int[] arrays){ int[] result = new int[arrays.length]; //for (int i = 0;i < arrays.length;i++){ //    result[(arrays.length-1)-i] =arrays[i]; //} for (int i = 0,j = arrays.length-1;i < arrays.length;i++,j--){     result[j] = arrays[i]; } return result;    }    public static void printArray(int[] arrays){ for (int i = 0;i < arrays.length;i++){     System.out.println(arrays[i]); }    }}

四.多维数组

多维数组

多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组.

二维数组

int[][] a = new int[2][5];
int[][] arr = {{1,2},{2,3},{3,4},{4,5}};

在这里插入图片描述

public class Demo04 {    public static void main(String[] args) { int[][] arr = {{1,2},{2,3},{3,4},{4,5}};//一个特殊的一维数组,其每一个元素都是一个一维数组. System.out.println(arr[0][0]); System.out.println(arr[1].length);    }}

练习:打印二维数组中的值

public class Demo04 {    public static void main(String[] args) { int[][] arr = {{1,2},{2,3},{3,4},{4,5}};  for (int i = 0;i < arr.length;i++){     for (int j = 0;j < arr[i].length;j++){  System.out.print(arr[i][j]);     } }    }}

五.Arrays类

数组工具类Java.util.Arrays

  • 由于数组对象本身没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基础的操作.

  • Arrays类中方法都是static修饰符修饰的静态方法,在使用时可以直接使用类名进行调用,而不用(不用而不是不能)使用对象来调用

打印数组

import java.util.Arrays;public class Demo05 {    public static void main(String[] args) { int a[] = {1,2,5,123,15,2,4}; //[I@448139f0 一个对象 System.out.println(a); //打印数组 System.out.println(Arrays.toString(a)); //相同效果的方法 printArray(a);    }    public static void printArray(int[] arrays){ for (int i = 0;i < arrays.length;i++){     if(i==0){  System.out.print("[");     }     if (i==arrays.length-1){  System.out.print(arrays[i]);  System.out.print("]");     }else {  System.out.print(arrays[i]+", ");     } }    }}

数组排序

import java.util.Arrays;public class Demo06 {    public static void main(String[] args) { int a[] = {1,2,5,123,15,2,4}; //数组升序 Arrays.sort(a); System.out.println(Arrays.toString(a));    }}

填充数组

import java.util.Arrays;public class Demo06 {    public static void main(String[] args) { int a[] = {1,2,5,123,15,2,4};//数组元素全都填充为0 Arrays.fill(a,0); System.out.println(Arrays.toString(a));    }}
import java.util.Arrays;public class Demo06 {    public static void main(String[] args) { int a[] = {1,2,5,123,15,2,4};//数组下标2到下标为4的元素填充为0   [2,4)左闭右开 Arrays.fill(a,2,4,0); System.out.println(Arrays.toString(a));    }}

比较数组:通过equals方法比较数组中元素值是否相等.

六.稀疏数组

当二维数组大多数是0或同一个值的时候,就可以用稀疏数组来保存该数组

  • 记录数组一共几行几列,有多少个不同的值
  • 把具有不同值的元素行和列以及值记录在一个小规模的数组中,从而缩小程序的规模
public class Demo08 {    public static void main(String[] args) { int[][] arrays= new int[10][10]; arrays[1][3] = 5; arrays[5][8] = 3; arrays[1][6] = 9; //打印原来的数组 for(int i = 0;i < arrays.length;i++){     for (int j = 0;j < arrays[i].length;j++){  System.out.print(arrays[i][j]+"\t");     }     System.out.println(); } //计算数组中有多少个值不同 int num = 0; for(int i = 0;i < arrays.length;i++){     for (int j = 0;j < arrays[i].length;j++){  if(arrays[i][j]!=0){      num++;  }     } } System.out.println(num); //创建稀疏数组 int[][] xs =new int[num+1][3]; xs[0][0] = 10; xs[0][1] = 10; xs[0][2] = num; num = 1; //把不同的值的i,j以及值存到稀疏数组中 for(int i = 0;i < arrays.length;i++){     for (int j = 0;j < arrays[i].length;j++){  if(arrays[i][j]!=0){      xs[num][0] = i;      xs[num][1] = j;      xs[num][2] = arrays[i][j];      num++;  }     } } //打印稀疏数组 for(int i = 0;i < xs.length;i++){     for (int j = 0;j < xs[i].length;j++){  System.out.print(xs[i][j]+"\t");     }     System.out.println(); }    }}

七.扩展

内存分析

在这里插入图片描述

1.声明数组时

int[] array;

在这里插入图片描述

2.创建数组时

array = new int[8];

在这里插入图片描述

3.数组元素赋值时

array[0] = 1;array[1] = 2;array[2] = 3;array[3] = 4;array[4] = 5;

在这里插入图片描述

在这里插入图片描述

冒泡排序

1.比较数组中两个相邻的元素,如果第一个数比第二个大,我们就交换他们的位置

2.每一次比较,都会产生一个最大或者最小的数字

3.下一轮则可以少一次排序

4.依次循环,直到结束

import java.util.Arrays;public class Demo07 {    public static void main(String[] args) { int a[] = {1,2,5,123,15,2,4}; a = paixu(a); System.out.println(Arrays.toString(a));    } public static int[] paixu(int[] arrays){ for (int i = 0;i<arrays.length-1;i++){     for (int j = 0;j < arrays.length-1-i;j++){  if(arrays[j]>arrays[j+1]){      int b = arrays[j+1];      arrays[j+1] = arrays[j];      arrays[j] = b;  }     } } return arrays;    }}

这个算法的时间复杂度为O(n2).


其他专栏

❤️《编程相关技能》专栏
🧡《HTML5》专栏
💛《CSS3》专栏
💚《java从0到1》专栏
💙《英语语法》专栏