Java-数组

2020-09-14  本文已影响0人  有腹肌的豌豆Z

数组的基本概念

数组的定义:
数组的基本特点:
  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:数组没有封装,数组对象只提供了一个数组长度的属性,但是没有提供方法用来操作元素。

定义一个数组

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

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

初始化数组

静态初始化
arrayName = new type[] {element1 , element2 , element3 , element4...};
动态初始化
arrayName = new type[length];
    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 , ...};

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

但是千万要记住,数组属于引用数据类型,所以在数组使用之前一定要开辟控件(实例化),如果使用了没有开辟空间的数组,则一定会出现 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());
 }

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

上一篇 下一篇

猜你喜欢

热点阅读