作者gasbomb (虚空雷神兽)
看板java
标题Re: [问题] 关於 Collection 的相关问题
时间Thu Aug 27 16:41:33 2020
※ 引述《sam92260 (中坜炸豆腐)》之铭言:
: 嗨大家好,小弟我还是学生想请问大家一些关於 collection 的问题,因为想了很久还是
: 想不通,所以想请大家帮帮忙。
你好啊 欢迎光临温馨的 java 大家庭 (?)
: (Question 1)可是假如我今天只是想要有LIFO 的这种特性,那我是不是不需要考虑这麽
: 多,这两种用哪一种看心情随便使用即可?
不是, 你考虑太少了
ArrayList 有一个很有名的特性, 那就是 ArrayList 其实是用 Object[] 在存东西的
如果你去看 ArrayList 的原始码
就会发现 new ArrayList() 其实有一个预设容量 = 10
当你想加入第 11 个元素的时候
ArrayList 发现已经放不下了, 会自己产生一个两倍大的新阵列
然後把全部的元素复制到新阵列
如果今天你的 stack 里面的资料会瞬间爆量到几十几百万的话
在开新阵列 - 复制元素的时候就会有卡住的感觉
而且 ArrayList 的空间会自动变大, 但是却不会自动缩小
也就是说你的 stack 属於偶尔会爆量, 但是大部分时间其实没什麽元素在里面
用 ArrayList 就会非常没效率又占空间
: (Question 2)又或着说我今天也直接宣告成底下这样也没差?
: LinkedList<Integer> stack3 = new LinkedList<Integer>();
: ArrayList<Integer> stack4 = new ArrayList<Integer>();
: 因为上述这两种宣告方式,我反而能有更多 methods 可以使用,不会局限於只能用 List
: 介面的 methods。
: 但!但是!我今天也有查到,发现大家在实作 queue 和 stack都比较常用底下这方法:
: Queue queue1 = new ArrayDequeue();
: Queue stack5 = new ArrayDequeue();
: (Question 3)但是我看到这实作方法後,我一样浮出跟上面的疑问,如果我只是想要有FI
: FO orLIFO 的特性的话我何不直接这样宣告:
: ArrayDequeue queue2 = new ArrayDequeue();
: ArrayDequeue stack6 = new ArrayDequeue();
: 这样宣告,我甚至还有更多 methods 可以是使用!
对啊, 没差
不过通常这是在 method 里面比较会这样用
因为很多演算法都需要特殊的资料结构配合
但是当 List 作为参数传递的时候
通常不会使用太特定的型别
因为 List 在程式之间传递
87% 的情况通常都只会关心 List 的内容
而不会使用到那些 method
例如今天我们合作开发购物车
我写前面的购物流程, 你负责写结帐程式
然後你的结帐程式长这样
public Result shoppingCartCheckout(
ArrayList items)
也许你的程式有 100 个好理由使用 ArrayList
但是也尽量不要要求别人传一个 ArrayList 给你
因为可能在购物的时候, 对我来说使用 LinkedList 才是合理的资料结构
: (Question 4) 假设我今天要养成良好的Coding习惯的话,我该用哪种宣告方式呢?
: 能请大家说一下业界的习惯是什麽吗?
让自己习惯能用 interface 就尽量使用
只有在真的需要特定 subclass 上面的 method 的时候才宣告为 subclass
: (Question 5) 我在查这些资料的时候还有看到一下关键字:
: Thread-Safe
: Non Thread-Safe
这个问题有点大...
我该回去上班了, 有空再说吧
--
╔═◢ ◣═╦╦═════╦═════╗
║
◤◤◤ ◥ ╠╣
飞鸟ももこ╠═╗ ║
║ ▇ ▇ ║╚═════╝ ╚═╦═╣
║ ▌ ● ● ▌ ║╔══════╗╔═╩═╣
║
◤ ◥
︺█◤
◥╠╣
Momoko Asuka╠╝ ║
╚◣◢ ▄▂▄ ◣◢╩╩══════╩════╝
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 122.116.28.7 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1598517696.A.CEE.html
1F:推 tw11509: 我是觉得他的问题自己去看书就好了XD 08/27 16:45