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

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

  •  
  •   byte10 · 174 天前 · 1281 次点击
    这是一个创建于 174 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

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

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

    我能想到的例子:

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

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

    总结:

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

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

    求助

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

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

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

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

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

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

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