分享好友 最新动态首页 最新动态分类 切换频道
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虫洞栈

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

最新文章
怎么使用AI写作工具批量写作?批量AI智能写作的方法
随着科技的不断发展,人工智能(AI)技术在各个领域都有了广泛的应用,其中之一就是智能写作。对于需要大量文本创作的用户来说,批量AI智能写作成为提高效率的一项重要工具。本文将专心分享批量AI智能写作的
福昕PDF编辑器 13.3.624.26728
福昕pdf编辑器个人版是一款便捷实用、功能丰富的文档编辑工具,它拥有启动速度快、浏览迅速、内存占用小等多个优点,不仅可以浏览各种pdf文件,还能编辑pdf文档的页面内容,进行插入、修改、移除、旋转、复制等操作,使用起来非常的方便。
适当使用关键词,避免堆砌,优化独立站的SEO
在当今数字化时代,拥有一个独立网站已成为许多企业和个人展现自我的重要途径。然而,创建一个成功的网站仅仅是第一步,如何提升其可见性,尤其是在搜索引擎中的排名,显得尤为重要。这就是搜索引擎优化(SEO)的魅力所在。小编今天将为大
网购的口气清新剂竟是电子烟?电子烟乱象难禁,未成年人成最大受害者
未成年的儿子在正规网购平台购买了一款名为“口腔喷雾清新剂”的产品,吸食后直呼“味道真甜”,并吐出香精味的烟雾。陈女士仔细检查才发现,这竟是一款伪装成清新剂的电子烟。近年来,电子烟因其“低门槛”和隐蔽性成为市场乱象的重灾区。
许昌网站排名优化软件,提升网站排名的利器,许昌正规网站优化公司
许昌网站排名优化软件是提升网站排名的利器,通过专业的优化技巧和策略,帮助网站在搜索引擎中获得更好的排名。许昌正规网站优化公司则提供全方位的网站优化服务,包括关键词研究、内容优化、链接建设等,确保网站在搜索引擎中获得更高的曝
小米Note 3与小米6全面对比:升级澎湃OS后的差异体验(2024版)
从价格维度来看,小米Note3和小米6的价格水平大体相当。但当我们深入探讨其硬件配置时,便会发现两者之间存在诸多差异。在硬件核心方面,小米Note3和小米6主要区别在于屏幕大小、处理器、前置摄像头、电池容量以及人脸解锁功能。简单来说,
如何刷机vivo手机?最新的刷机教程分享
刷机是改变手机系统的一种方法,可以给手机带来更多的功能和自定义选项。如果你拥有一部vivo手机,想要尝试刷机,下面是一个简单的教程,帮助你完成这个过程。在刷机之前,务必备份好手机中的重要数据,包括联系人、短信、照片等。刷机过程
京东小店入驻流程?京东小店怎么开?
  下面是详细的入驻流程:  1.注册京东小店账号:  进入京东小店的首页,点击“注 册”按钮,在输入个人信息后点击“注册”按钮。  2.提交企业资料:  在注册完成后,需要在“店 家管理”中点击“填写企业资料”将企业相关信息填
搜索引擎的Query自动纠错技术和架构详解
如今,搜索引擎是人们的获取信息最重要的方式之一,在搜索页面小小的输入框中,只需输入几个关键字,就能找到你感兴趣问题的相关网页。搜索巨头Google,甚至已经使Google这个创造出来的单词成为动词,
高绩效的秘密,不靠奖惩
最近微信改版经常有读者朋友错过推送星标
相关文章
推荐文章
发表评论
0评