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

Java基础(Arrays工具类)(asList()方法)(详细)

目录

一、Arrays工具类

(1)引言

(2)基本介绍

(3)主要功能(提供的方法)

(I)排序(Arrays.sort())

(II)搜索(查找)(Arrays.binarySearch())

(III)打印和转换(Arrays.toString()、Arrays.asList())

(IIII)复制(Arrays.copyOfRange())

(IIIII)填充(替换)(Arrays.fill())

二、asList()方法

(1)基本介绍

(2)功能介绍

(I)返回的列表大小固定。

反例(错误示范)

转换为ArrayList,才能进行add()操作。

(II)修改原始数组会影响列表。

(III)基本类型数组的注意。

(IIII)常见用途。

(3)大部分情况的代码示例


一、Arrays工具类

(1)引言
  • 实际的开发中,经常需要按某些特定条件对容器或者数组进行查找替换排序反转甚至是打乱等操作。直接编写代码实现可以,但是会增加工作量,且性能不能得到保证。
  • 应对这种情况,而Java集合提供了两个工具类"Collections"、"Arrays"。其中这两个类提供了很多的静态方法。提供"类名.方法"完成操作即可。
(2)基本介绍
  • Arrays工具类是Java中的一个非常实用的工具类,它位于java.util包下。专门用于对数组进行各种操作。由于数组本身是一个固定长度的数据结构,且提供的方法有限,Arrays工具类通过提供一系列的静态方法,极大地扩展了数组的功能。
(3)主要功能(提供的方法)
(I)排序(Arrays.sort())
  • Arrays.sort(T[] a)。此方法对数组a中的所有元素进行升序排序。这里的T代表数组元素的类型,且该类型必须实现了Comparable接口。自然排序(从小到大)就是根据元素类型的自然顺序(即compareTo方法定义的顺序)进行排序。
  • 工具类"Arrays"还提供了多个重载的sort()方法。也就是既可以自然排序,也可以通过传入比较器参数按照自定义的规则排序。
  • Arrays.sort(T[] a, Comparator<? super T> c)。此方法允许用户传入一个自定义的Comparator来实现排序。Comparator是一个函数式接口,它包含了一个compare方法,用于比较两个对象。通过实现这个compare()方法用户可以定义自己的排序规则。如果compare方法返回负数,则表示第一个参数应该排在第二个参数之前;如果返回正数,则表示第一个参数应该排在第二个参数之后;如果返回0,则表示两个参数相等
(II)搜索(查找)(Arrays.binarySearch())
  • Arrays.binarySearch(Object[] a, Object key)。使用二分查找算法在已排序的数组中查找特定元素。如果找到该元素,则返回其索引;如果未找到,则返回-(插入点) - 1。注意,使用此方法前必须确保数组已经排序
(III)打印和转换(Arrays.toString()、Arrays.asList())
  • Arrays.toString(Object[] a)。返回数组内容的字符串表示形式,这对于打印数组或将其转换为字符串表示非常有用。打印的输出结果结构清晰,如下。
import java.util.Arrays;  public class Main {  public static void main(String[] args) {  Integer[] numbers = {1, 2, 3, 4, 5};  String arrayString = Arrays.toString(numbers);  System.out.println(arrayString); // 输出:[1, 2, 3, 4, 5]  String[] strings = {"Hello", "World", "Java"};  String stringArrayString = Arrays.toString(strings);  System.out.println(stringArrayString); // 输出:[Hello, World, Java]  }  
}
  • 除了Object[]类型的数组,Arrays.toString()方法还有其他重载版本,可以处理基本类型数组(如 int[]double[] 等),这些重载版本内部会将基本类型数组转换为对应的包装类型数组(如 Integer[]Double[]),然后调用 Object[] 版本的 toString() 方法。
  • Arrays.asList(T... a)。将数组转换为列表(List<T>)。但需要注意的是,这个方法返回的列表是固定大小的,它不支持add和remove等修改列表大小的操作
(IIII)复制(Arrays.copyOfRange())
  • Arrays.copyOf(T[] original, int newLength)。复制数组,返回一个新数组,其长度为newLength。如果newLength大于原数组的长度,则新数组其余部分将用null(对于对象数组)或0(对于基本类型数组)填充。
  • Arrays.copyOfRange(T[] original, int from, int to)。复制指定范围的数组,返回一个新数组,包含从from(包含)到to(不包含)的元素。
(IIIII)填充(替换)(Arrays.fill())
  • 在程序开发中,有时需要将一个数组中的所有元素替换成同一个元素。此时就可以用这个fill()方法,该方法可以将指定的值赋给数组中的每一个元素。
  • Arrays.fill(Object[] a, Object val)。用指定的值填充整个数组。
  • Arrays.fill(Object[] a, int fromIndex, int toIndex, Object val)。用指定的值填充数组的一部分,从fromIndex(包含)到toIndex(不包含

二、asList()方法

(1)基本介绍
  • asList()是Java中 java.util.Arrays 类的一个静态方法,它属于 Arrays 工具类中的方法。
  • 这个方法的作用是将一个数组(无论是对象数组还是基本类型数组的包装类数组)转换成一个固定大小的列表(List
  • 但是,返回的列表是由原始数组支持的,这意呀着列表是非同步的。并且它的大小是固定的,即列表的大小不会随着原始数组的变化而变化
(2)功能介绍
(I)返回的列表大小固定。
  • 通过asList()方法获得的列表是固定大小的,不支持添加(add)或删除(remove)元素操作。尝试进行这些操作会抛出 UnsupportedOperationException 异常。如果需要可变列表,可以像下面一样的操作。

  • 反例(错误示范)

  • 转换为ArrayList,才能进行add()操作。

(II)修改原始数组会影响列表。
  • 由于列表和数组共享相同的数据结构,因此如果你修改了原始数组中的元素,那么通过 asList()方法返回的列表中的相应元素也会发生变化。

(III)基本类型数组的注意。
  • asList()方法接受的是对象数组,因此如果你尝试将一个基本类型的数组(如 int[], double[] 等)直接传递给 asList,它不会按你期望的方式工作

  • 例如,Arrays.asList(new int[]{1, 2, 3}) 实际上会创建一个只包含一个元素的列表,这个元素是整个 int[] 数组,而不是数组中的每个 int 值。为了解决这个问题,你需要将基本类型数组转换为包装类型的数组,例如使用 Integer[] 而不是 int[]

(IIII)常见用途。
  • asList()方法常用于需要将数组作为列表传递给需要 List 类型参数的方法时,或者当你需要快速地将数组转换为一个列表以便使用列表的某些方法(如 contains, indexOf 等)时。

(3)大部分情况的代码示例
import java.util.Arrays;  
import java.util.List;  public class AsListExample {  public static void main(String[] args) {  // 示例1:将数组转换为列表  String[] array = {"apple", "banana", "cherry"};  List<String> list = Arrays.asList(array);  System.out.println(list); // 输出:[apple, banana, cherry]  // 示例2:修改列表中的元素,同时影响原始数组  list.set(0, "grape");  System.out.println(Arrays.toString(array)); // 输出:[grape, banana, cherry]  // 示例3:尝试添加元素到列表(会抛出异常)  // list.add("date"); // 这行代码会抛出 UnsupportedOperationException  // 示例4:将基本类型数组转换为列表(错误示例)  int[] intArray = {1, 2, 3};  List<int[]> intList = Arrays.asList(intArray); // 注意:这里只有一个元素,即intArray本身  System.out.println(intList.size()); // 输出:1  // 正确的做法是将基本类型数组转换为包装类型数组,再转换为列表  Integer[] integerArray = {1, 2, 3};  List<Integer> integerList = Arrays.asList(integerArray);  System.out.println(integerList); // 输出:[1, 2, 3]  }  
}

相关文章:

  • 鸿蒙开发(NEXT/API 12)【硬件(接入手写套件)】手写功能开发
  • 《深度学习》卷积神经网络 数据增强、保存最优模型 原理解析及实例实现
  • 【自动驾驶】对2D框的四条边同时缩进
  • 【07】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Swiper轮播组件与样式结构重用
  • Linux下C开发使用小技巧
  • TIM定时中断
  • 17 vue3之tsx手写vite tsx插件
  • 每天学习一个技术栈 ——【Django Channels】篇(1)
  • Kafka与RabbitMQ:深入理解两者之间的区别
  • MySQL基础--表的增删改查
  • 时间技能物品竞品抢拍拍卖发布h5公众号小程序开源版开发
  • 笔记整理—linux进程部分(2)使用fork创建进程
  • 尚品汇-自动化部署-Jenkins的安装与环境配置(五十六)
  • 十分钟实现内网连接,配置frp
  • JavaWeb图书借阅系统
  • 5、React组件事件详解
  • golang 发送GET和POST示例
  • HTTP中GET与POST的区别 99%的错误认识
  • Java 多线程编程之:notify 和 wait 用法
  • java中的hashCode
  • php的插入排序,通过双层for循环
  • vue.js框架原理浅析
  • webgl (原生)基础入门指南【一】
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 浅谈Golang中select的用法
  • 微信开源mars源码分析1—上层samples分析
  • 怎么将电脑中的声音录制成WAV格式
  • Spring Batch JSON 支持
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • ###STL(标准模板库)
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • $().each和$.each的区别
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (39)STM32——FLASH闪存
  • (bean配置类的注解开发)学习Spring的第十三天
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (六)Flink 窗口计算
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (四)汇编语言——简单程序
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转载)利用webkit抓取动态网页和链接
  • ./configure,make,make install的作用(转)
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET单元测试使用AutoFixture按需填充的方法总结
  • .NET连接MongoDB数据库实例教程
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...
  • @PreAuthorize与@Secured注解的区别是什么?
  • []Telit UC864E 拨号上网
  • [2016.7 test.5] T1
  • [AI Google] 使用 Gemini 取得更多成就:试用 1.5 Pro 和更多智能功能
  • [C#]OpenCvSharp使用帧差法或者三帧差法检测移动物体