V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
byte10
V2EX  ›  程序员

来看看这个 ArrayList 冒泡排序的问题也是服了,帮我举个例子

  •  
  •   byte10 · 2022-08-10 11:20:45 +08:00 · 1583 次点击
    这是一个创建于 597 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    这个文章的例子,把我看懵了: https://mp.weixin.qq.com/s/3Fw2vfbkiGCsA_bys40TRg

    我不知道怎么说服这位网友,他觉得解题的思路没问题。。。

    我能想到的例子:

    1. 这不就是好比,我想去重启电脑,我按了一个电脑的按钮,结果电脑关机了。然后我拆开电脑发现它的短接电源开关的。。。然后给出结论这个按钮不能重启的原因:是短接了主板电源开关的。。导致了它无法做到重启的作用。
    2. 又好比我按了一个电饭锅的按钮,结果把饭煮成了粥,然后拆开电饭锅,发现这个按钮的功能是慢火慢煮,最终煮成粥的。结果怪这个按钮功能实现有问题。。然后列举这个按钮做不成饭的原因:是因为这个按钮的实现是慢慢煮,导致无法煮成饭。。。这思路。
    3. 又好比我去用方向盘去把车刹停,结果发现这个方向盘没法刹车 只能转弯。然后我一顿操作拆了这辆车,然后发现它只会让轮子转向,而不能让轮子刹车。得出的结论是方向盘只所以不能刹车的原因是:因为它只能让这个轮子发生偏转,而不能刹车,它只能转弯。。。

    我的理解是:方向盘不能刹车,是因为它一开始定义的时候就不是用来刹车的,而不是它用了什么机械液压动力或者电子助力,而导致它不能刹车,不管你用什么技术去实现,去制作这个方向盘,它永远还是一样不能刹车。

    总结:

    你可以说方向盘不能刹车的原因是:因为它只能让轮子转向。。。但是你不能反过来说:因为方向盘用了电子助力转向,而导致它不能刹车。那你潜在的意思是说:方向盘还有其他的实现能做到刹车的功能?

    我的解释是:不看接口定义的说明而用错了,然后举证说明是里面的各种实现有问题。。。add 方法不管如何实现都是无法替换的元素的,它定义就是在某个位置添加元素。

    求助

    我刚毕业那几年对知识理解也是会有点很乱,但是也不至于会这样的思考问题。

    大家有没有什么好的例子来帮助这位小伙子,他思维经常很绕,总是把简单的问题复杂化。怎么才能帮助他突破思维的困局,思考问题的时候弄的简单一点。

    dwlovelife
        1
    dwlovelife  
       2022-08-10 11:24:24 +08:00
    这不是一个定制排序的事么==
    jones2000
        2
    jones2000  
       2022-08-10 12:05:19 +08:00
    “大家有没有什么好的例子来帮助这位小伙子,他思维经常很绕,总是把简单的问题复杂化。怎么才能帮助他突破思维的困局,思考问题的时候弄的简单一点。” 这是优点, 原来 3W 预算的项目,可以报到 30W 的预算,创收呀。
    太简单了怎么能赚钱呢, 比如原来 1 个 java 单进程的服务就可以搞定的,报价 3W ,利润太低了,那就拆微服务,上集群,机器采购,这样 300W 不就来了嘛,功能还是原来的功能,甲方乙方都开心,还能扩大就业。
    byte10
        3
    byte10  
    OP
       2022-08-10 12:08:12 +08:00
    @jones2000 你这个思路也是有意思🤣。但是这个是逻辑有问题啊,因果 关系没有梳理清楚。
    Qy2FbR
        4
    Qy2FbR  
       2022-08-10 12:20:50 +08:00 via Android
    都冒泡 swap j, j+1 了直接 swap j, n-1 不是更方便快捷
    楼主的例子我更看不懂
    byte10
        5
    byte10  
    OP
       2022-08-10 12:31:54 +08:00
    @Qy2FbR 额,你没看完那个文章吧。。。
    MoYi123
        6
    MoYi123  
       2022-08-10 12:32:40 +08:00
    这文章真不是在钓鱼? 感觉正常人都不会有这种思路吧...
    byte10
        7
    byte10  
    OP
       2022-08-10 12:53:45 +08:00
    @MoYi123 真的。。。并不是钓鱼。我也是搞不明白他为何会有这样的思考方式。
    chenxytw
        8
    chenxytw  
       2022-08-10 13:26:52 +08:00
    单看文章....太像是为了表现自己而强行构造场景。急于证明自己有能力,同时认为能看懂标准库就属于有能力的表现之一,于是强行编了个故事,
    zhhmax
        9
    zhhmax  
       2022-08-10 13:31:03 +08:00
    每个人的思维方式本身就有区别,没必要去说服而且你也很难去说服,尊重祝福就完事了。
    fzdwx
        10
    fzdwx  
       2022-08-10 14:12:19 +08:00   ❤️ 1
    或许应该用`set`这个方法?
    zxCoder
        11
    zxCoder  
       2022-08-10 14:13:23 +08:00
    看不懂你想干嘛
    byte10
        12
    byte10  
    OP
       2022-08-10 14:51:34 +08:00
    @zxCoder 文章使用 list.add 进行冒泡排序,结果发现这个方法不可行。list.set 是可以的。但是他得出的结果是:add 方法的实现( 由 System.arraycopy 以及 size 引起的数组复制、容器变大的问题 ) 导致了他不能正确使用。也就是说用了方向盘去刹车,结果无法刹车,就说方向盘实现有问题。。。导致了他无法刹车,强行扯上因果关系。

    @fzdwx 是的用 set 方法可以的。
    @zhhmax 尽量引导吧。。
    @chenxytw 人性的东西就不去评论他了,就事论事,希望引导他正确的逻辑思维。
    zxCoder
        13
    zxCoder  
       2022-08-10 15:12:06 +08:00
    @byte10 懂了,有可能场景是凭空想象的,只是为了解读源码写一篇文章?
    11232as
        14
    11232as  
       2022-08-10 15:16:27 +08:00
    主要问题是人闲活儿少,要是天天一堆活,不用现成解决方案这样折腾早累死了
    ytll21
        15
    ytll21  
       2022-08-10 16:01:10 +08:00
    把简单的事情复杂化,有产品经理的潜质,挺好的。
    yiqunz
        16
    yiqunz  
       2022-08-10 16:01:58 +08:00
    这不是思维方式的问题,而是他脱离的基础知识去思考问题,或者说基础不行
    List API 算是基础知识,怎么用,可能会出现什么问题都应该知道。
    简单的场景调用 api 根本不需要考虑源码的实现。。。
    而且一般考虑都是性能或者安全的问题,而不是这种最基本的使用场景。。。,这种更像是不熟悉 api 引发的问题?
    这就是为什么面试让手写 ArrayList 的原因吗?
    Jooooooooo
        17
    Jooooooooo  
       2022-08-10 16:34:21 +08:00
    ...

    add 是插入一个元素, 这是用错 api 了吧.
    byte10
        18
    byte10  
    OP
       2022-08-10 16:34:26 +08:00
    @zxCoder 不是凭空想象的场景,而是用错了接口。但是他认为 add 方法实现有问题,达不到他理解的功能。其实 set 方法才是替换元素,add 是新增元素。但是强行扯其他的原因( 由 System.arraycopy 以及 size 引起的数组复制、容器变大的问题 ),我完全不理解他的思维方式。。
    @yiqunz 对!我始终不明白为何要扯上具体的实现,接口定义说明就是很清楚了。方向盘就是用过来转弯的,他拿来刹车,然后发现没法刹车,就怪方向盘的实现有问题,已经不是思维方式的问题了。
    @11232as 不是折腾的问题,你还没是理解 文章要表达的意思 😂。你要看 整个文章的分析过程,我也是醉了。

    @ytll21 不是复杂化,因果 关系没扯明白。。。可以说方向盘不能刹车的原因是:因为它只能让轮子转向。但是反过来说:方向盘只能改变轮子转向,导致了方向盘不能刹车。。。这逻辑。
    admol
        19
    admol  
       2022-08-10 16:37:03 +08:00
    文章作者在第一版使用的时候似乎都忘了 List 是可以允许重复的,并且认为 get 出来等同于删除了,如果他想起来了肯定不会写出这样的代码吧。

    看他最后一版和第一版的区别也就在 get 和 remove 。
    byte10
        20
    byte10  
    OP
       2022-08-10 16:42:29 +08:00
    @admol 他是一开始就认为 list.add 方法就是在位置上替换元素。这文章结果没问题,但是分析的过程有问题。。。扯上了很多毫无关系的原因。你可以看看我的评论,来理解这文章存在的思维错误。
    @Jooooooooo 嗯,用错了,没啥大问题。但是一顿 分析其原因 就有大问题。
    Chinsung
        21
    Chinsung  
       2022-08-10 18:37:52 +08:00
    槽点太多以至于不知道该怎么说,你让他自己在自己世界就好了,管他干啥
    现在越是不懂越想装懂,恨不得把源码都背下来,项目经验也恨不得全部编出来,干这行这种人比比皆是
    Chinsung
        22
    Chinsung  
       2022-08-10 18:40:13 +08:00
    @Chinsung #21 再换句话说,这个人才难道不知道 java 也能用数组吗,用数组处理完再转回 list 不就完了?
    Chinsung
        23
    Chinsung  
       2022-08-10 18:43:51 +08:00
    @Chinsung #21 看了下别的文章,一个没什么经验比较肤浅的人,既然看到 Reentrantlock 了好歹说下看下 AQS ,然后翻了下最浅层的源码和公平锁非公平锁的构造器就结束了,啊这
    byte10
        24
    byte10  
    OP
       2022-08-10 19:27:06 +08:00
    @Chinsung 嗯,随便看了几篇,都是讲的比较浅的文章。另外你猜对,没啥经验倒是真的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2427 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 16:03 · PVG 00:03 · LAX 09:03 · JFK 12:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.