Loading

数组的基本使用

概述

  • 数组是相同类型数据的有序集合
  • 数组的创建是JVM在堆空间(Heap)中为数组元素分配内存空间并返回地址的过程
  • 数组可作为方法的返回值,返回的其实是地址

一维数组

创建一维数组

一维数组可以动态初始化也可以静态初始化

动态初始化:指定数组的长度,其中元素默认为0

int[] a = new int[10];

静态初始化:指定数组的内容

int[] a = new int[] {1, 2, 3};
或者
int[] a = {1, 2, 3};

获取长度

int len = a.length;

输出

如果直接输出数组名,则实际输出的是:数组对应内存地址的哈希值

System.out.println(a);

如果想要输出数组的内容,需要使用Arrays工具类的toString方法

System.out.println(Arrays.toString(a));

二维数组

创建二维数组

动态创建

int[][] a = new int[3][3];

二维数组还可以先创建一维数组,再对一维数组进行细化

int[][] a = new int[2][];
a[0] = new int[2];
a[1] = new int[3];

静态创建

int[][] a = {{1,2,3}, {1}};

二维数组的遍历

传统方式遍历:

for(int i = 0; i < a.length; i++) {
    for(int j = 0; j < a[i].length; j++) {   
    }
}

使用foreach方式遍历:

for(int x[] : a) {
    for(int e : x) {
        System.out.println(e);
    }
}

数组的特点

  1. 数组的长度是确定的。数组一旦被创建,其大小就是不可改变的
  2. 同一个数组内的元素必须是相同类型
  3. 数据中的元素可以是任何数据类型
  4. 数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该变量的成员变量
  5. 数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的

for-each

JDK 1.5 引进了一种新的循环类型,被称为 For-Each 循环或者加强型循环,它能在不使用下标的情况下遍历数组

格式:

for(类型 变量名:集合) {
    
}
  • 类型:集合元素的类型
  • 变量名:表示集合中的每一个元素
  • 集合:需要被遍历的集合对象或数组

举例:

int[] num = {1,2,3,4};
for(int x : num) {
    System.out.println(x);
}

String[] urls = { "http://c.biancheng.net/java", "http://c.biancheng.net/c", "http://c.biancheng.net/golang/" };
for (String url : urls) {
    System.out.println(url);
}

Arrays类

Arrays类的是数据的工具类,包路径为:java.util.Arrays

Arrays类中包含了一些可以对数组进行操作的方法,如下:

赋值

fill(int[] a, int value)
fill(int[] a, int fromIndex, int toIndex, int value)
指定范围赋值[fromIndex,toIndex)

排序

Arrays.sort(a);  //升序

Arrays.sort(a, Collections.reverseOrder());  //降序

复制

copyOf(a, int newlength);
  • newlength:复制后新数组的长度大于原数组,用0填充

举例:

int[] a = new int[] {1, 2, 3};
int[] b = Arrays.copyOf(a, 5);  //b数组为:1, 2, 3, 0, 0

指定范围复制:

copyOfRange(a, int formIndex, int toIndex);

查询

二分搜索法,使用前先排序

binarySearch(Object[] a, Object key);
  • 如果key包含在数组中,返回索引,否则返回-1或插入点(第一个大于此键的元素索引)

举例:

int index = Arrays.binarySearch(a,10);

范围查询:

binarySearch(Object[], int fromIndex, int toIndex, Object key);
posted @ 2021-04-23 10:12  qinuna  阅读(156)  评论(0编辑  收藏  举报