当前位置: 首页 > news >正文

【Java学习笔记】Arrays类

Arrays 类

1. 导入包:import java.util.Arrays

2. 常用方法一览表

方法描述
Arrays.toString()返回数组的字符串形式
Arrays.sort()排序(自然排序定制排序
Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是有序的
Arrays.copyOf()数组元素的复制
Arrays.fill()数组元素的填充
Arrays.equals()比较两个数组内容是否完全一致
Arrays.asList()将一维数组,转换成 List 集合

一、Arrays.toString()

优点:方便查看数组内容,避免了通过遍历来输出内容的繁琐

代码示例

import java.util.Arrays;
public class main {public static void main(String[] args) {int[] arr = {1,2,3,4,5,6};System.out.println(Arrays.toString(arr));}
}// 输出结果
[1, 2, 3, 4, 5, 6]

二、Arrays.sort()重点!

1. 自然排序(底层:快速排序

import java.util.Arrays;
public class main {public static void main(String[] args) {int[] arr = {6,5,9,8,32,1,4};Arrays.sort(arr);System.out.println(Arrays.toString(arr));}
}// 输出结果
[1, 4, 5, 6, 8, 9, 32]

2. 定制排序

(1)引入接口:Comprator

(2)实现接口方法compare

(3)代码示例

1. 原先代码

Arrays.sort(integer_arr, new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return 0;}
});

说明:当前还没有学习泛型,代码修改为如下形式

2. 修改后的代码

import java.util.Arrays;
import java.util.Comparator;public class main {public static void main(String[] args) {Integer[] integer_arr = {6,5,9,8,32,1,4};Arrays.sort(integer_arr, new Comparator() {@Overridepublic int compare(Object o1, Object o2) {Integer n1 = (Integer) o1;Integer n2 = (Integer) o2;return n1 - n2;}});System.out.println(Arrays.toString(integer_arr));}
}// 输出结果
[1, 4, 5, 6, 8, 9, 32]

代码说明

三、实现定制排序的底层探究

1. 进入 sort 方法的底层源码

public static <T> void sort(T[] a, Comparator<? super T> c) {if (c == null) {sort(a);} else {if (LegacyMergeSort.userRequested)legacyMergeSort(a, c);elseTimSort.sort(a, 0, a.length, c, null, 0, 0);}
}

2. 进入 TimeSort 类的 sort 方法

static <T> void sort(T[] a, int lo, int hi, Comparator<? super T> c,T[] work, int workBase, int workLen) {assert c != null && a != null && lo >= 0 && lo <= hi && hi <= a.length;int nRemaining  = hi - lo;if (nRemaining < 2)return;  // Arrays of size 0 and 1 are always sorted// If array is small, do a "mini-TimSort" with no mergesif (nRemaining < MIN_MERGE) {int initRunLen = countRunAndMakeAscending(a, lo, hi, c);binarySort(a, lo, hi, lo + initRunLen, c);return;}

3. 进入binarrySort方法

private static <T> void binarySort(T[] a, int lo, int hi, int start,Comparator<? super T> c) {assert lo <= start && start <= hi;if (start == lo)start++;for ( ; start < hi; start++) {T pivot = a[start];// Set left (and right) to the index where a[start] (pivot) belongsint left = lo;int right = start;assert left <= right;/** Invariants:*   pivot >= all in [lo, left).*   pivot <  all in [right, start).*/while (left < right) {int mid = (left + right) >>> 1;if (c.compare(pivot, a[mid]) < 0)right = mid;elseleft = mid + 1;}assert left == right;

4. 本质:通过c.compare(pivot, a[mid])的结果来影响排序结果

核心部分代码

while (left < right) {int mid = (left + right) >>> 1;if (c.compare(pivot, a[mid]) < 0)right = mid;elseleft = mid + 1;
}

总结


四、Arrays.binarySearch()

二分查找方法(返回查找元素下标索引

注意点

底层源码

private static int binarySearch0(int[] a, int fromIndex, int toIndex,int key) {int low = fromIndex;int high = toIndex - 1;while (low <= high) {int mid = (low + high) >>> 1;int midVal = a[mid];if (midVal < key)low = mid + 1;else if (midVal > key)high = mid - 1;elsereturn mid; // key found}return -(low + 1);  // key not found.
}

代码示例

import java.util.Arrays;public class main {public static void main(String[] args) {int[] arr = {1, 2, 3};System.out.println(Arrays.binarySearch(arr, 2));System.out.println(Arrays.binarySearch(arr, 10));}
}// 输出结果
1
-4

代码说明

查找的元素10不存在,应该插入的位置为3下标索引),返回- (low + 1),即- (3 + 1),所以返回-4


五、Arrays.copyOf()

数组的拷贝

代码示例

import java.util.Arrays;public class main {public static void main(String[] args) {int[] arr = {1, 2, 3};int[] new_arr = Arrays.copyOf(arr,arr.length);System.out.println("arr: " + Arrays.toString(arr));System.out.println("new_arr:" + Arrays.toString(new_arr));}
}// 输出结果
arr: [1, 2, 3]
new_arr:[1, 2, 3]

六、Arrays.fill()

使用方法:Arrays.fill(目标数组填充值)

理解:把原数组中的所有数替换成填充数

代码示例

import java.util.Arrays;public class main {public static void main(String[] args) {int[] arr = {1, 2, 3};Arrays.fill(arr,1);System.out.println("after_fill:" + Arrays.toString(arr));}
}// 输出结果
after_fill:[1, 1, 1]

七、Arrays.equals()

比较两个数组的内容是否一致

使用方法:Arrays.equals(数组一数组二)

代码示例

import java.util.Arrays;public class main {public static void main(String[] args) {int[] arr = {1, 2, 3};int[] arr1 = {4,5,6};System.out.println("arr.equals(arr1)? " + Arrays.equals(arr,arr1));}
}// 输出结果
arr.equals(arr1)false

八、Arrays.asList()

1. 将一维数组转成 List 集合

2. 编译类型:List(接口)

3. 运行类型:java.util.Arrays#ArrayList,是 Arrays 类的静态内部类

private static class ArrayList<E> extends AbstractList<E>implements RandomAccess, java.io.Serializable

代码示例

import java.util.Arrays;
import java.util.List;public class main {public static void main(String[] args) {List aslist = Arrays.asList(1,2,3);System.out.println("aslist:" + aslist);System.out.println("getclass():" + aslist.getClass());}
}// 运行结果
aslist:[1, 2, 3]
getclass()class java.util.Arrays$ArrayList
http://www.xdnf.cn/news/930349.html

相关文章:

  • 视频音频去掉开头结尾 视频去掉前n秒后n秒 电视剧去掉开头歌曲
  • 408第一季 - 数据结构 - 图
  • 数据结构排序
  • AU音频软件|Audition 2025网盘下载与安装教程指南
  • AURA智能助手在物联网(IoT)和数字化改造领域的使用
  • Linux运维新人自用笔记(乌班图apt命令和dpkg命令、两系统指令区别,rpm解决路径依赖、免安装配置java环境)
  • 机器学习用于算法交易(Matlab实现)
  • 在VSCode中使用Ultralytics扩展
  • 探索 Shell:选择适合你的命令行利器 bash, zsh, fish, dash, sh...
  • RabbitMQ work模型
  • 基于SpringBoot利用死信队列解决RabbitMQ业务队列故障重试无效场景问题
  • RabbitMQ 的高可用性
  • 比较数据迁移后MySQL数据库和PostgreSQL数据仓库中的表
  • [蓝桥杯 2024 国 B] 蚂蚁开会
  • 分享今天做的力扣SQL题
  • 2025.6.8
  • 《从函数模板到类模板:OP泛型编程进化论》
  • C++信息学竞赛中常用函数的一般用法
  • C++ OpenCV 学习路线图
  • YooAsset 2.3.9版本 示例教程运行
  • el-input,金额千分符自动转换
  • Unity中的transform.up
  • 【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
  • Java求职者面试:微服务技术与源码原理深度解析
  • SpringSecurity+vue通用权限系统2
  • SOC-ESP32S3部分:36-适配自己的板卡
  • HTML前端开发:JavaScript的条分支语句if,Switch
  • HTML前端开发:JavaScript 常用事件详解
  • 4. TypeScript 类型推断与类型组合
  • 分析 java 的 Map<String,Map<String, List<Map<String,Integer>>>>