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

news2024/9/27 9:30:14

目录

一、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]  
    }  
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2165790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA自动清理类中未使用的import包

目录 1.建议清理包的理由 2.清理未使用包的方式 2.1 手动快捷键清理 2.2 设置自动清理 1.建议清理包的理由 有时候项目类文件中会有很多包被引入了&#xff0c;但是并没有被使用&#xff0c;这会增加项目的编译时间并且代码可读性也会变差。在开发过程中&#xff0c;建议设…

ISP去噪(3)_图像的高频分量和低频分量

#图像分析# 总是不好确认头发和毛绒玩具到底是低频还是高频分量。现在得出结论&#xff0c;头发和毛绒玩具都是高频信息&#xff0c;因为细节很多。 目录 图像的频率 (1) 什么是低频? (2) 什么是高频? &#xff08;3&#xff09;低频和高频对比 &#xff08;4&#xf…

谷歌今天发布了两款升级版Gemini模型:Gemini-1.5-Pro-002和Gemini-1.5-Flash-002

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

免杀笔记 ---> 无痕Hook?硬件断点 Syscall!

说到Hook&#xff0c;我们有很多Hook&#xff0c;像Inline-Hook&#xff0c;我们也是用的比较多&#xff0c;但是正如我上一篇Blog说的&#xff0c;他会对内存进行修改&#xff0c;如果EDR或者AV增加一个校验机制&#xff0c;不断检验某一块内存&#xff0c;那么就算你用syscal…

Flink 结合kafka 实现端到端的一致性原理

Kafka 事务实现原理 Flink checkpoint 结合kafka 实现端到端的一致性 为啥taskState 的时候要开启一个新事务&#xff0c;因为本来做state 就相当于把barrier之前的状态做一个快照&#xff0c;相当于是一个新的开始&#xff0c;所以开启一个新的事务。那为啥checkpoint 第一步要…

如何在数据分析中处理异常?

在数据分析中&#xff0c;处理异常值是确保数据质量的关键步骤。以下是一些常见的方法&#xff1a; 1. 检测异常值 可视化方法 箱线图&#xff1a;通过matplotlib或seaborn绘制箱线图&#xff0c;识别数据中的异常值。 import seaborn as sns import matplotlib.pyplot as …

新版双向链表,添加了at, front, back, insert, emplace等为了兼容std.

例子&#xff1a; #define _list _DListint main() {list<int> c1 { 1,2,3,4,5,6,7,8,9,10};if (!c1.empty()) {c1.front() 42; //将42赋予c中的一个元素auto& v c1.back(); //获得指向最后一个元素的引用v 1024; //改变c中的元素auto v2 c1.back(); //v2不…

【笔记】Dynamic Taint Analysis 动态污点分析

Dynamic Taint Analysis 动态污点分析 什么是动态污点分析&#xff1f;为什么要搞动态污点分析&#xff1f; “污点”指的是什么&#xff1f; DTA中的“污点”指代的是不可信的输入&#xff0c;比如用户输入、网络请求、文件数据等。比方说&#xff0c;如果把程序看作一个城市&…

知识图谱检索 Graph-Based Retriever:文本块到结构化数据的转换,解决语义检索捕获不了的长尾关系

知识图谱检索 Graph-Based Retriever&#xff1a;文本块到结构化数据的转换&#xff0c;解决语义检索捕获不了的长尾关系 如何理解&#xff1f;如何分析&#xff1f;升维降维梳理为什么这种解法能查到长尾内容&#xff0c;而传统语义不行&#xff1f;解法拆解 如何关联&#xf…

大觅网之综合管理(Comprehensive Management of Da Mi Network)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

MySQL InnoDB 事务commit逻辑分析

一、前言 事务提交是事务即将落盘的一系列操作&#xff0c;涉及redo\undo log的写盘、bin log的写盘、事务状态的重置、各种参数的改变、无用undo log的清理等方方面面。 在commit过程会有两个阶段&#xff1a;一个是prepare阶段&#xff0c;入口函数为trx_prepare_low&#…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-25

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-25 1. PromSec: Prompt Optimization for Secure Generation of Functional Source Code with Large Language Models (LLMs) M Nazzal, I Khalil, A Khreishah, NH Phan - arXiv preprint arXiv:2409.12699, 2…

无人机探测:光电侦测技术详解

无人机探测技术作为现代军事、安防及民用领域的重要组成部分&#xff0c;其核心在于高效、精准地识别与跟踪空中目标。光电侦测技术&#xff0c;作为无人机探测的主要手段之一&#xff0c;利用光学与电子学原理&#xff0c;通过捕捉并分析无人机反射或发射的光信号&#xff0c;…

Debian与Ubuntu:深入解读两大Linux发行版的历史与联系

Debian与Ubuntu&#xff1a;深入解读两大Linux发行版的历史与联系 引言 在开源操作系统的领域中&#xff0c;Debian和Ubuntu是两款备受瞩目的Linux发行版。它们不仅在技术上有着密切的联系&#xff0c;而且各自的发展历程和理念也对开源社区产生了深远的影响。本文将详细介绍…

【C++指南】C++中的内存对齐规则及原因详解

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C指南》 期待您的关注 目录 引言 一、为什么要进行内存对齐 二、C中的内存对齐规则 三、内存对齐示例讲解 示例代码 运行…

Spring Boot 进阶-第一个程序HelloWorld

从我们学习编程语言开始,每次入门一个语言都是从Hello World开始,当然这里我们也不例外。首先从一个简单的HelloWorld程序开始。 既然是要学着做Java Web开发,那么首先需要了解的就是如何去编写一个RESTFul风格的接口,这里我们就需要引入一个pom的依赖。 <dependency&g…

矩阵分析 学习笔记4 内积与Gram矩阵

内积 定义 由于对称&#xff0c;第二变元线性那第一变元也线性了。例如这个&#xff1a;

【YashanDB知识库】yashandb执行包含带oracle dblink表的sql时性能差

本文内容来自YashanDB官网&#xff0c;具体内容请见https://www.yashandb.com/newsinfo/7396959.html?templateId1718516 问题现象 yashandb执行带oracle dblink表的sql性能差&#xff1a; 同样的语句&#xff0c;同样的数据&#xff0c;oracle通过dblink访问远端oracle执行…

spring学习 【基础】

目录 1.将bean交给spring容器管理 1. 编写bean对象 2. 在resources目录下创建spring config xml文件&#xff0c;并管理bean对象 3. spring容器管理工厂 2.Spring Bean 生命周期 2.1 Spring Bean初始化方法 2.1.1 自定义初始化方法 2.1.2 实现接口(InitializingBean)…

Spring6梳理12——依赖注入之注入Map集合类型属性

以上笔记来源&#xff1a; 尚硅谷Spring零基础入门到进阶&#xff0c;一套搞定spring6全套视频教程&#xff08;源码级讲解&#xff09;https://www.bilibili.com/video/BV1kR4y1b7Qc 12 依赖注入之注入Map集合类型属性 12.1 创建Student类和Teacher类 Student类中创建了run…