常用数据结构——数组(Arrays)

数组(Arrays)是一种基本的数据结构,可以存储固定大小的相同类型的元素。

在 Java 中,数组可以是任何类型的数据的集合,包括基本数据类型和引用数据类型。

一、数组创建

(1)先声明再初始化
// 声明数组变量
dataType[] array;
// 使用new创建数组
array = new dataType[arraySize];
array = new dataType[] {value1, value2, value3}
(2)同时声明与初始化
dataType[] array = new dataType[arraySize];
dataType[] array = {value1, value2, value3};
dataType[] array = new dataType[] {value1, value2, value3}

注:数组的元素通过索引访问。数组索引从 0 开始,所以索引值从 0 到 array.length-1。

二、数组遍历

(1)for 循环遍历
int[] myList = new int[] {1, 2, 3, 4, 5};
int total = 0;
for (int i = 0; i < int.length; i++) {
    total += myList[i];
}
(2)For-Each 循环遍历
// For-Each 循环,能在不使用下标的情况下遍历数组。
int[] myList = new int[] {1, 2, 3, 4, 5};
int total = 0;
for(int element: myList)
{
    total += element;
}

三、数组特点

  • 数组的大小固定,一旦创建不能更改。添加或删除元素,需要创建一个新数组。  
  • 数组中元素必须是相同类型,不能出现混合类型。  
  • 数组中元素的类型可以是任意类型(引用类型、基本类型)。  
  • 数组变量属引用类型,数组也可以看成是对象,数组中每个元素相当于该对象的成员变量。

四、多维数组

多维数组可以看成是数组的数组

1.普通二维数组

// Length1 和 Length2 必须为正整数,Length1 为行数,Length2 为列数。
dataType[][] array = new dataType[Length1][Length2];

2. 不规则数组(锯齿状数组)

不规则数组是指每一行的长度可以不同。

String[][] s = new String[2][];
//最高维限制其能保存数据的最长的长度
s[0] = new String[2];  // 为最高维分配引用空间
s[1] = new String[3];  // 为最高维分配引用空间

五、Arrays 类

java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的。常用方法如下:

(1)Arrays.fill()
// 将指定的 int 值分配给指定 int 型数组指定范围中的每个元素。
// 同样的方法适用于所有的其他基本数据类型

// public static void fill(int[] a,int fromIndex, int toIndex, int val)
// fromIndex - 要使用指定值填充的第一个元素的索引(包括)
// toIndex - 要使用指定值填充的最后一个元素的索引(不包括)

int[] array = new int[10];
Arrays.fill(array, 3, 6, 50);

(2)Arrays.toString()
// 可以将数组转换成String类型输出的
int[] intArray = { 1, 4, 6, 7, 8, 9, 10 };
System.out.println(Arrays.toString(intArray));
(3)Arrays.sort()

基于快速排序的算法思想:最坏情况下是O(n*n),最好和平均情况下都是O(nlogn)。

1. 普通排序,默认升序

//对指定对象数组根据其元素的自然顺序进行升序排列。
int[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};

// public static void sort(Object[] a, int fromIndex, int toIndex);
// 对数组部分排序,也就是对数组a的下标从fromIndex到toIndex-1的元素排序
Arrays.sort(a, 0, 3);

// public static void sort(Object[] a);
// 也可以省略下标参数
Arrays.sort(a);

2. 用Comparator接口实现自定义排序规则

用法示例:

// public static void sort(T[] a, Comparator<? Super T> c);

int[][] intervals = new int[][] {{1,2},{4,8},{2,3},{2,5}};
Arrays.sort(intervals, new Comparator<int[]>() {
    public int compare(int[] a, int[] b) {
        //返回值>0交换
        if(a[0] !=b[0]) {
            return a[0]-b[0];
        }else {
            return a[1]-b[1];
        }
    }
});
(4)Arrays.binarySearch()

在排序数组中进行二分搜索。如果找到,返回元素的索引;如果未找到,返回负数。

int[] numbers = new int[5]{1,2,3,4,5};
int index = Arrays.binarySearch(numbers, 3);
System.out.println(index); // 输出 2

  • 13
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值