今天的博客主题

       Java常用类 ——》Java数组


什么是数组

数组是数据结构之一,基本上所有的编程语言都直接引用了数组。

让大家误以为数组是编程语言提供的一种数据类型,其实不是。

数组是一种最简单的复合数据类型,它是有序数据的集合,数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和不同的下标来唯一确定数组中的元素。

根据数组的维度,可以将其分为一维数组、二维数组和多维数组等。

简单说数组是用来存储指定大小的同类型数据的有序集合。

数组中的每一个数据称它为元素,可以通过下标(索引)来获取。

 

数组的特点

1)数组的长度是固定的,一旦被创建就,长度无法改变。

2)元素类型必须一致。只要Java支持的类型都OK。

3)数组的元素在堆内存中被分配,而且是连续的内存。

4)数组的每个元素都有序号,从0开始,称为下标、索引、角标

5)使用new关键字对数组进行内存的分配。每个元素都会被赋予默认值。

6)数组属于引用数据类型。

 

数组的优缺点

优点

1)可以存储若干个元素的值

2)随机访问效率高(根据下标查询)

3)搜索效率较高(可使用折半方法)

4)

缺点

1)长度固定不能调整,存储效率低

2)数组元素只能是一种数据类型。

3)对数组元素做删除和插入效率低,需要移动数据。

4)

 

数组的定义

数组类型[] 数组名 = new 数组类型[数组长度];

或者

数组类型[] 数组名 = {元素1,元素2,元素3,.....,元素N};

中括号[]代表数组。

 

一维数组

一维数组就是数组的元素直接就是数据。

数组有动态数组和静态数组。

动态数组:初始化数组的时候只指定数组长度,系统为数组分配元素。即通过索引设置内容。

静态数组:初始化数组的时候指定元素,有系统决定数组的长度。

一维数组的定义

// 静态数组初始化方式
int[] arr = new int[]{1,2,3,4,5};
int[] arr1 = {1,2,3,4,5};
String[] array1 = {"李四","张三","王五"};
String[] array2 = new String[]{"邓超","李晨","岳云鹏"};
// 动态数组初始化方式,必须指定数组长度[5]
int[] arri = new int[5];

一维数组的操作

public static void main(String ages[]) {
    // 初始化一个静态一维数组
    int[] arr = {3,2,4,5,6,1};			
    System.out.println("获得数组长度:" + arr.length);
    System.out.println("获得数组第一个元素:" + arr[0]);
    // 遍历数组,取出数组里的每个元素
    for (int i = 0; i < arr.length; i++) {
        System.out.println("数组第"+i+"个元素:" + arr[i]);
    }
    // 更改数组某个下标的元素
    arr[1] = 7;
    // 将数组排序,通过Java提供操作数组的API来实现
    Arrays.sort(arr);
    // 数组转字符串
    String str = Arrays.toString(arr);
    System.out.println(str);
    // 数组转List集合。注意一哈,基本数据类型的数组不可以转成List
    String[] strArr = new String[] {"张三","赵四","王五","李六","岳云鹏"}; 
    List<String> asList = Arrays.asList(strArr);    
    // 校验数组是否包含某个值
    if (Arrays.asList(strArr).contains("岳云鹏")) {
        System.out.println("有岳云鹏");
    }
    // 动态数组赋值
    String[] arri = new String[3];
    for (int i = 0; i < arri.length; i++) {
        arri[i] = "HelloWorld:" + i;
    }
    System.out.println("动态数组赋值完之后的数组:" + Arrays.toString(arri));
    // 数组去重,利用set的特性
    int[] arr1 = {3,2,4,5,6,1,3,1,6,6,4,3,7,2};
    Set<Integer> set = new HashSet<Integer>();
    for (int i = 0; i < arr1.length; i++) {
        set.add(arr1[i]);
    }
    System.out.println("arr1数组去重之后:" + set);
    // 获取数组最大值和最小值
    int[] arr2 = {3,2,4,5,6,1};
    int max = arr2[0];
    for (int i = 0; i < arr2.length; i++) {
        if(arr2[i] > max) {
            max = arr2[i];
        }
    }
    System.out.println("arr2数组最大值:" + max);
    // 最小值自己动手试试
}
==================》输出
获得数组长度:6
获得数组第一个元素:3
数组第0个元素:3
数组第1个元素:2
数组第2个元素:4
数组第3个元素:5
数组第4个元素:6
数组第5个元素:1
[1, 3, 4, 5, 6, 7]
有岳云鹏
动态数组赋值完之后的数组:[HelloWorld:0, HelloWorld:1, HelloWorld:2]
arr1数组去重之后:[1, 2, 3, 4, 5, 6, 7]
arr2数组最大值:6

数组用起来很方便,操作简单。这里只是列举一些对数组的操作。。

比如要做两个数组的合并,学会百度谷歌,找例子去写main方法运行,看结果是不是自己想要的。

 

二维数组

二维数组就是数组里套数组。

数据类型 [ ][ ]  数组名 = new 数据类型[m][n]

数据类型 [ ][ ]   数组名 = {{元素1,元素2....},{元素1,元素2....},{元素1,元素2....}.....};

二维数组的定义

// 声明一个静态二位数组
int[][] arr = {{2,3,1},{5,4,6},{9,7,8},{10,12}}; 
// 声明一个动态二位数组
int[][] arr1 = new int[3][2];

二维数组的操作

就把二维数组当做一维数组来操作就行。

public static void main(String ages[]) {	
    // 初始化一个静态二维数组
    int[][] arr = {{2,3,1},{5,4,6},{9,7,8},{0}}; 
    System.out.println("二维数组的长度:" + arr.length);
    System.out.println("二维数组里的第一个数组长度:" + arr[0].length);
    // 遍历这个二维数组
    for (int i = 0; i < arr.length; i++) {
         int[] arri = arr[i];
        for (int j = 0; j < arri.length; j++) {
            System.out.println("静态二维数组里的第" + i + "个数组里的第"+j+"个元素是:" + arri[j]);
        }
    }
    // 声明一个动态二维数组
    int[][] arr1 = new int[3][2];
    // 动态为二维数组赋值
    for (int i = 0; i < arr1.length; i++) {
        int[] arri = arr1[i];
        for (int j = 0; j < arri.length; j++) {
            arri[j] = j + 90;
            if(j == arri.length) {
                arr1[i] = arri;
            }
        }
    }
    // 遍历出来这个动态二维数组里的值
    for (int i = 0; i < arr1.length; i++) {
        int[] arri = arr1[i];
        for (int j = 0; j < arri.length; j++) {
            System.out.println("动态二维数组里的第" + i + "个数组里的第"+j+"个元素是:" + arri[j]);
        }
    }
}

说了一维数组,二维数组。那有没有三维数组呢?

其实是有的,只不过是除了一维数组之外其他的都被称之为多维数组。

一般没有特殊的指定在说数组的时候,都是说的一维数组。

三维数组那就是有三个[][][],几维就是有几个[]。

在那遍历多维数组的时候,几个[]就套几个fori循环,来遍历取值或赋值。


都是些常规操作,等说数据结构,好好盘盘它...