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

2022-08-10 11:20:45 +08:00
 byte10

背景

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

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

我能想到的例子:

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

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

总结:

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

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

求助

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

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

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

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

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

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

看他最后一版和第一版的区别也就在 get 和 remove 。
byte10
2022-08-10 16:42:29 +08:00
@admol 他是一开始就认为 list.add 方法就是在位置上替换元素。这文章结果没问题,但是分析的过程有问题。。。扯上了很多毫无关系的原因。你可以看看我的评论,来理解这文章存在的思维错误。
@Jooooooooo 嗯,用错了,没啥大问题。但是一顿 分析其原因 就有大问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/871882

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX