分享好友 最新动态首页 最新动态分类 切换频道
java compareto方法怎么排序的_面经手册 第10篇扫盲java.util.Collections工具包,学习排序、二分、洗牌、旋转算法...
2024-12-26 20:53

持续坚持原创输出,点击蓝字关注我吧

作者:小傅哥博客:https://bugstack.cn

java compareto方法怎么排序的_面经手册  第10篇扫盲java.util.Collections工具包,学习排序、二分、洗牌、旋转算法...

沉淀、分享、成长,让自己和他人都能有所收获!?

  • 一、前言

  • 二、面试题

  • 三、Collections 工具类

    • 1. Collections.sort 排序

    • 2. Collections.binarySearch 二分查找

    • 3. Collections.shuffle 洗牌算法

    • 4. Collections.rotate 旋转算法

    • 5. 其他API介绍

  • 四、总结

  • 五、系列推荐

好的算法搭配上合适的数据结构,可以让代码功能大大的提升效率。当然,算法学习不只是刷题,还需要落地与应用,否则到了写代码的时候,还是会+。

当开发一个稍微复杂点的业务流程时,往往要用到与之契合的数据结构和算法逻辑,在与设计模式结合,这样既能让你的写出具有高性能的代码,也能让这些代码具备良好的扩展性。

「那么」,有了这些数据结构的基础,接下来我们再学习一下Java中提供的算法工具类,。

,今天怎么无精打采的呢,还有黑眼圈

「答」:好多知识盲区呀,最近一直在努力补短板,还有面经手册里的数据结构。

「问」:那数据结构看的差不多了吧,你有考虑?过,数据结构里涉及的排序、二分查找吗

「答」:二分查找会一些,巴拉巴拉。

「问」:还不错,那你知道这个方法在Java中有提供对应的工具类吗?是哪个

「答」:这?好像没注意过,没用过

「问」:去吧,回家在看看书,这两天也休息下。

飞机悄然的出门了,但这次面试题整体回答的还是不错的,面试官决定下次再给他一个机会。

,是java集合框架的一个工具类,主要用于提供的通用算法;排序、二分查找、洗牌等算法操作。

「Collections.sort」

「Collections.indexedBinarySearch(list, key)」

以上这段代码就是通过每次折半二分定位元素,而上面所说的耗时点就是,这在我们分析数据结构时已经讲过。《LinkedList插入速度比ArrayList快?你确定吗?》

「Collections.iteratorBinarySearch(list, key)」

上面这段代码是元素数量大于5000个,同时是 LinkedList 时会使用迭代器 的方式进行二分查找操作。也算是一个优化,但是对于链表的数据结构,仍然没有数组数据结构,二分处理的速度快,主要在获取元素的时间复杂度上O(1) 和 O(n)。

3. Collections.shuffle 洗牌算法

「洗牌算法」,其实就是将 List 集合中的元素进行打乱,一般可以用在抽奖、摇号、洗牌等各个场景中。

3.1 功能使用

它的使用方式非常简单,主要有这么两种方式,一种直接传入集合、另外一种还可以传入固定的随机种子这种方式可以控制洗牌范围范围

3.2 源码分析

按照洗牌的逻辑,我们来实现下具体的核心逻辑代码,如下

「运行结果:」

4.1 功能应用

这里我们将集合顺序,顺时针旋转2位,测试结果如下;逆时针旋转为负数

「测试结果」

  1. Arraylist 或者元素数量不多时,则通过算法实现。
  2. 如果是 LinkedList 元素数量又超过了 ROTATE_THRESHOLD,则需要使用算法实现。

「那么」,这两个算法有什么不同呢

4.2.1 旋转算法,rotate1

这部分代码看着稍微多一点,但是数组结构的操作起来并不复杂,基本如上面圆圈图操作,主要包括以下步骤

  1. ,获取旋转的位置。
  2. for循环和dowhile,配合每次的旋转操作,比如这里第一次会把0位置元素替换到2位置,接着在dowhile中会判断,满足条件继续把替换了2位置的元素继续往下替换。直到一轮循环把所有元素都放置到正确位置。
  3. 最终list元素被循环替换完成,也就相当从某个位置开始,正序旋转2个位置的操作。
4.2.2 旋转算法,rotate2

接下来这部分源码主要是针对大于个元素的LinkedList进行操作,所以整个算法也更加有意思,它的主要操作包括

  1. 定位拆链位置,-distance % size + size,也就是我们要旋转后找到的元素位置
  2. 第一次翻转,把从位置0到拆链位置
  3. 第二次翻转,把拆链位置到结尾
  4. 第三次翻转,翻转整个链表
5.1 最大最小值
  • 工具包可以进行最值的获取。
5.2 元素替换
  • 可以把集合中某个元素全部替换成新的元素。
5.3 连续集合位置判断

在使用String操作中,我们知道,可以获取某个元素在什么位置。而在集合操作中,可以获取连续的元素,在集合中的位置。

5.4 synchronized
  • 这个很熟悉吧,甚至经常使用,但可能会忽略这些线程安全的方法来自于 集合工具包。
  • 本章节基本将工具包中的常用方法介绍完了,以及一些算法的讲解。这样在后续需要使用到这些算法逻辑时,就可以直接使用并不需要重复造轮子。
  • 学习数据结构、算法、设计模式,这三方面的知识,重点还是能落地到日常的业务开发中,否则空、假、虚,只能适合吹吹牛,并不会给项目研发带来实际的价值。
  • 懂了就是真的懂,别让自己太难受。死记硬背谁也受不了,耗费了大量的时间,知识也没有吸收,学习一个知识点最好就从根本学习,不要心浮气躁。
  • DDD领域驱动设计落地方案
  • 重学Java设计模式(22个真实开发场景)
  • 面经手册(上最快的车,拿最贵的offer)
  • 字节码编程(非入侵式全链路监控实践)

bugstack虫洞栈

沉淀、分享、成长,让自己和他人都能有所收获

最新文章
【A52QQ同步助手下载】酷比A52QQ同步助手8.0.14免费下载
* 国内知名数字生活媒体AppSo推荐【QQ同步助手,备份你的手机生活!】换手机必备神器!手机资料自动备份,安全保护防丢失!一键备份手机通讯录、软件、文档到云端的超实用工具!------手机随便换,资料不丢失------ 【智能管理通讯录】备份
购买google账号后在大陆能用吗、googleplay韩国账号
“买韩国谷歌账号”这一现象在中国已经持续了多年,有一定的风险,但仍有很多人愿意购买。这些人中既有需要使用韩国谷歌服务的用户,也有一些从事网络推广或其他行业的人士。购买韩国谷歌账号存在一定的风险,但对于需要使用谷歌服务的用户
架构师指南:构建 AI/ML 数据湖参考架构
在企业人工智能中,有两种主要类型的模型:判别型和生成型。判别型模型用于对数据进行分类或预测,而生成型模型用于创建新数据。尽管生成型人工智能最近占据了新闻头条,但组织仍在追求这两种类型的人工智能。对于希望提高运营效率并寻求额
有哪些适合新媒体运营的平台(「网络推广」适合用于推广的营销平台有哪些?)
网络推广通过各种在线平台和渠道传播产品或服务信息,提高知名度和曝光度,并与目标受众互动建立良好的品牌形象和声誉。网络推广可以增加品牌知名度、拓宽客户基础和提高客户忠诚度,同时成本较低,适用于小型企业。网络推广旨在扩大企业或
氛围游戏大全 高人气氛围游戏排行榜前十
探索游戏新风尚!《氛围游戏大全》揭示高人气排行榜,带你领略那些让人沉浸其中、备受玩家喜爱的前十大游戏。无论是紧张刺激的冒险,还是轻松愉快的社交体验,这里有你不可错过的精彩之作。一探究竟,感受最热门的游戏氛围吧!《40 Seconds
访客来访统计、地域访问限制、url链接跳转
收费插件应有良好的售后服务,售后QQ:购买后查看插件说明,备注“订单编号”。漠漠睡访问统计插件说明1.支持统计所有来访者IP、页面地址、页面状态1.1.默认只记录蜘蛛爬取数据1.2.可在后台设置开启记录访客访问数据,有效获取访客访问页面数
长丰万国汽配城的状况怎样了解?了解后怎样进行分析?
长丰万国汽配城是一个在汽配领域具有一定影响力的商业项目。要全面了解其状况,可以从以下几个方面入手:再者,与在汽配城经营的商户交流。他们对汽配城的运营管理、租金水平、市场竞争等方面有着切身的感受和深入的了解,能够提供真实且实
百度词条每个人可以编辑吗怎么弄?如何参与编辑?
在众多网络百科中,百度百科因其用户基数庞大、信息量丰富而备受关注。百科创建搜锦随推。许多人出于学习和工作的需求,在使用百度时需要获取更多更详尽的信息。随着互联网的发展,越来越多的用户希望了解能否参与词条的编辑工作,以及具体
飞纳台式扫描电镜大样品室卓越版
产品性能PhenomXL 是一款使用高亮度 CeB6 灯丝的大样品室台式扫描电镜。大样品直径为 100mm,放大倍数 200,000 倍以下, PhenomXL 是您正确的选择。在继承飞纳电镜 15抽真空成像、全自动化操作、直接观测绝缘体、防震设计等优点的基础上,
谷歌发布最强量子计算芯片,宁德时代将在西班牙建厂 | 财经日日评
  日本企业商品价格指数连创历史新高  12月11日,日本央行数据,11月日本企业商品价格指数(CGPI)达到124.3,同比上涨3.7%,超过市场预测中值的3.4%,连续第三个月创下历史新高。本次增长主要受食品、有色金属和塑料制品价格上涨影响
相关文章
推荐文章
发表评论
0评