美文网首页
Java-数组

Java-数组

作者: 有腹肌的豌豆Z | 来源:发表于2020-09-14 13:42 被阅读0次

数组的基本概念

数组的定义:
  • Java中要求所有的数组元素具有相同的数据类型。因此在一个数组中,数组元素的类型是唯一的,不能存储多种类型的数据。
  • 一旦数组的初始化完成,数组在内存中所占的空间将被固定下来,因此数组的长度不可以被改变。即使某个数组元素的数据被清空,他占的空间依然被保留,依然属于该数组,数组的长度依然不变。
  • 值得指出的是,数组也是一种数据类型,是引用类型。所以可以把数组作为数组的元素,也就构成了二维数组。
  • 数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们。
  • 数组名代表的是连续空间的首地址
    通过首地址可以依次访问数组所有元素
    元素在数组中的排序叫做下标从零开始
数组的基本特点:
  1. 长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
  2. 其元素必须是相同类型,不允许出现混合类型。元素的类型可以是java 支持的任意类型
  3. 数组类型可以是任何数据类型,包括基本类型和引用类型。
  4. 数组的元素在堆内存中被分配空间,并且是连续分配的
  5. 使用new 关键字对数组进行 内存的分配。每个元素都会被jvm 赋予默认值。默认规则:整数:0 浮点数:0.0 字符:\u0000 布尔:false 引用数据类型:null。
  6. 数组的元素都是有序号的,序号从0开始,0序的。称作数组的下标、索引、角标

数组的优缺点:

优点:

1:可以保存若干个数据。
2:随机访问的效率很高。根据下标访问元素效率高(元素连续分配空间)。

缺点:

1:数组的元素的类型必须一致。元素类型必须一致。
2:连续分配空间在堆中,如果数组的元素很多,对内存的要求更加的严格。
3:根据内容查找元素效率比较低,需要逐个比较个。
4:删除元素、插入元素效率比较低,需要移动大量的元素。
5:数组定长,不能自动扩容。
6:数组没有封装,数组对象只提供了一个数组长度的属性,但是没有提供方法用来操作元素。

定义一个数组

数组的定义可以采用两种方法,推荐采用第一种,这样变量的类型是数组这一概念更加直接。

  • (1) type[] arrayName;
  • (2) type arrayName[];

数组是一个引用类型的变量,因此使用它定义一个变量时,仅仅表示定义了一个引用变量(也就是定义了一个指针),这个引用变量还未指向任何有效的内存,因此定义数组时并没有指定数组的长度,这个应用变量并没有指向任何有效的内存空间,所以还不能被使用,需要对其初始化。

初始化数组

静态初始化
  • 初始化时由程序员显示指定每个数组元素的初始值,由系统决定数组长度。
arrayName = new type[] {element1 , element2 , element3 , element4...};
  • 此处的type必须与定义数组变量时所用的type相同,也可以是定义时的type的子类
  • 执行静态初始化时,显示指定的数组元素值的类型必须与new关键字后面的type类型相同,或者时其子类的实例。
动态初始化
  • 初始化时程序员只指定数组长度,由系统为数组元素分配初始值。
arrayName = new type[length];
  • 这个时候数组是创建了,里面的每一个元素都是null
    public static void main(String[] arg){
        String[] str  = new String[10];
        System.out.print(str[0]);
        System.out.print(str[5]);
        System.out.print(str[9]);
    }

null
null
null

更简洁的方法
  • 如果我们在定义的时候就对数组进行静态初始化,可以用一种更简洁的方法。
type[] arrayName = {element1 , element2 , ...};

那么当数组开辟空间之后,就可以采用如下的方式的操作:

  • 数组的访问通过索引完成,即:“数组名称[索引]”,但是需要注意的是,数组的索引从0开始,所以索引的范围就是0 ~ 数组长度-1,例如开辟了3个空间的数组,所以可以使用的索引是:0,1,2,如果此时访问的时候超过了数组的索引范围,会产生java.lang.ArrayIndexOutOfBoundsException 异常信息;
  • 当我们数组采用动态初始化开辟空间后,数组里面的每一个元素都是该数组对应数据类型的默认值;
  • 数组本身是一个有序的集合操作,所以对于数组的内容操作往往会采用循环的模式完成,数组是一个有限的数据集合,所以应该使用 for 循环。
  • 在 Java 中提供有一种动态取得数组长度的方式:数组名称.length;

但是千万要记住,数组属于引用数据类型,所以在数组使用之前一定要开辟控件(实例化),如果使用了没有开辟空间的数组,则一定会出现 NullPointerException 异常信息。

数组引用传递

既然数组属于引用数据类型,那么也一定可以发生引用传递。在这之前首先来研究一下数组的空间开辟。

public class ArrayDemo {
    public static void main(String args[]) {
        int data[] = null;
        data = new int[3]; //开辟一个长度为3的数组
        data[0] = 10;
        data[1] = 20;
        data[2] = 30;
    }
}

那么既然说到了引用数据类型了,就一定可以发生引用传递,而现在的引用传递的本质也一定是:同一块堆内存空间可以被不同的栈内存所指向。

public class ArrayDemo {
    public static void main(String args[]) {
        int data[] = null;
        data = new int[3]; //开辟一个长度为3的数组
        int temp[] = null; //声明对象
        data[0] = 10;
        data[1] = 20;
        data[2] = 30;
        temp = data;  //int temp[] = data;
        temp[0] = 99;
        for(int i = 0; i < temp.length; i++) {
            System.out.println(data[i]);
        }
    }
}

java.util.Arrays类

DK提供的java.util.Arrays类,包含了常用的数组操作,方便我们日常开发。Arrays类包含了:排序、查找、填充、打印内容等常见的操作。

toString() 日志打印
public static String toString(long[] a) {
        if (a == null)
            return "null";
        int iMax = a.length - 1;
        if (iMax == -1)
            return "[]";
        
        // 将数组的元素拼接起来了 
        StringBuilder b = new StringBuilder();
        b.append('[');
        for (int i = 0; ; i++) {
            b.append(a[i]);
            if (i == iMax)
                return b.append(']').toString();
            b.append(", ");
        }
    }
sort() 排序
public static void sort(int[] a) {
      DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0);
}
asList() 将数组转换成集合
public static <T> List<T> asList(T... a) {
      return new ArrayList<>(a);
}
copyOf() 复制一份
 public static <T> T[] copyOf(T[] original, int newLength) {
      return (T[]) copyOf(original, newLength, original.getClass());
 }

还有很多方法 这里省略了。。。

相关文章

  • Java- 一维数组:

    Java- 一维数组: 使用语法 elementType[] arrayRefVar(元素类型[] 数组引用变量)...

  • java-数组

    定义数组 创建一维数组 二维数组 二维数组分配值 打印数组

  • Java-数组

  • Java-数组

    数组的基本概念 数组的定义: Java中要求所有的数组元素具有相同的数据类型。因此在一个数组中,数组元素的类型是唯...

  • java-数组

    数组 数组的定义   数组就是一个容器(存储多个东西的器皿,抽屉)。 容器的特点   定长,固定数据类型 索引  ...

  • Hello Java

    目录 Java-基础(1/6) Java-对象(2/6) Java-核心库类 上(3/6) Java-核心库类下(...

  • Java- 多维数组

    Java- 多维数组: 使用二维数组来存储表格。 可以使用以下语法来声明二维数组变量: 可以使用以下语法来创建二维...

  • Java-数组(8)

    一维数组 一维数组的定义例如:定义一个int型的数组int arr [] = {1,2,3,4,5};数据类型 变...

  • Java-入门-数组

    一、数组 定义一个数组类型的变量,使用数组类型“类型[]”,例如,int[]。和单个基本类型变量不同,数组变量初始...

  • Java-浅析Object类

    Java-浅析Object类 ++2016.7.19++byside @Java-浅析Object类 ======...

网友评论

      本文标题:Java-数组

      本文链接:https://www.haomeiwen.com/subject/mfunektx.html