0

0

什么是Java中的Arrays工具类_数组排序、搜索、填充与转换实战

P粉602998670

P粉602998670

发布时间:2026-02-26 12:44:02

|

744人浏览过

|

来源于php中文网

原创

arrays.sort()对自定义对象排序报classcastexception是因为未实现comparable接口或未传comparator;基本类型用双轴快排,引用类型用timsort;binarysearch未找到时返回-(insertionpoint+1);fill填引用会导致共享同一实例;tostring只展一层,deeptostring才处理嵌套数组。

什么是java中的arrays工具类_数组排序、搜索、填充与转换实战

Arrays.sort() 为什么对自定义对象排序会报 ClassCastException

因为没实现 Comparable 接口,或没传 Comparator。Java 默认只认 IntegerString 这类自带比较逻辑的类型。

  • 如果对象字段简单(比如只有 id),直接让类 implements Comparable,重写 compareTo()
  • 如果要按不同字段多次排序(比如一会按姓名,一会按年龄),别改类,用 Arrays.sort(arr, Comparator.comparing(Person::getName))
  • 注意:Arrays.sort() 对基本类型数组(int[])和引用类型数组(Person[])用的是两套底层算法,前者是双轴快排,后者是 TimSort —— 所以混用泛型和原始类型时行为不一致,容易误判性能

Arrays.binarySearch() 查不到元素却返回负数,怎么算实际插入位置

它返回的负数不是错误,而是设计好的:如果没找到,返回的是 -(insertionPoint + 1)。比如返回 -3,说明该元素应插在索引 2 的位置。

  • 必须保证数组已升序排序,否则结果完全不可信 —— 它不会帮你检查,也不会抛异常
  • byte[]double[] 等基本类型数组,有对应重载方法;但千万不能把 int[] 传给接收 Object[] 的版本,那会触发自动装箱成 Integer[],结果查不到
  • 如果数组里有重复元素,它只保证返回其中一个的索引,不保证是第一个还是最后一个

Arrays.fill() 填 null 到对象数组后,为什么修改一个元素所有都变了

因为你填的是同一个引用。比如 Arrays.fill(arr, new Person("A")),表面看填了 10 个对象,其实只是把同一个 Person 实例的引用复制了 10 次。

企奶奶
企奶奶

一款专注于企业信息查询的智能大模型,企奶奶查企业,像聊天一样简单。

下载
  • 正确做法是用循环单独 new: for (int i = 0; i
  • Arrays.fill() 对基本类型安全(int[]0 没问题),但对引用类型只适合填 null 或不可变对象(如 StringInteger
  • 如果真要批量初始化可变对象,考虑用 Stream.generate(() -> new Person()).limit(n).toArray(Person[]::new)

Arrays.toString() 和 Arrays.deepToString() 差在哪,什么时候用错会输出 [Ljava.lang.Object;@1b6d3586

前者只展开一层,遇到嵌套数组(比如 String[][])就直接调用子数组的 toString(),而默认实现就是打印类名加哈希值。

立即学习Java免费学习笔记(深入)”;

  • 一维数组用 Arrays.toString(),二维及以上必须用 Arrays.deepToString()
  • 自定义类数组如果想让 toString() 可读,得自己重写 toString() 方法;否则哪怕用 deepToString(),里层还是那个 @xxx
  • 日志里打数组内容时,别图省事直接 System.out.println(arr) —— 那等价于调 arr.toString(),永远是地址值
实际用的时候,最容易漏掉的是排序前是否真的有序、填引用对象时有没有意识到共享同一实例、还有多维数组 toString 的层级陷阱——这些地方不报错,但结果不对,debug 花的时间比写代码还长。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

850

2023.08.02

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

246

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

886

2024.03.01

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

404

2023.09.04

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

850

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

585

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

294

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

210

2025.08.29

batoto漫画官网入口与网页版访问指南
batoto漫画官网入口与网页版访问指南

本专题系统整理batoto漫画官方网站最新可用入口,涵盖最新官网地址、网页版登录页面及防走失访问方式说明,帮助用户快速找到batoto漫画官方平台,稳定在线阅读各类漫画内容。

331

2026.02.25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 3.9万人学习

C# 教程
C# 教程

共94课时 | 10.2万人学习

Java 教程
Java 教程

共578课时 | 72.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号