嗨大家好,小弟我还是学生想请问大家一些关于 collection 的问题,因为想了很久还是
想不通,所以想请大家帮帮忙。
先假设我今天想要实作一个stack
List<Integer> stack1 = new LinkedList<Integer>();
List<Integer> stack2 = new ArrayList<Integer>();
第一种方法为用LinkedList 类别实作 List 接口
第二种方法为用ArrayList 类别实作List接口
可是 stack1 和 stack2 同样都只能使用 List 接口的方法,所以我不太懂说用哪个类别
实作会有什么差。
如果我今天就只是要实作 LIFO的特性而上述,那上述实作方法都可达成我的目的。
我知道假设对stack1 做 get(int index) 最差为 O(n)
然后对 stack2 做 get(int index) 只要O(1)
(Question 1)可是假如我今天只是想要有LIFO 的这种特性,那我是不是不需要考虑这么
多,这两种用哪一种看心情随便使用即可?
————————————————————————————
(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 可以是使用!
————————————————————————————
(Question 4) 假设我今天要养成良好的Coding习惯的话,我该用哪种宣告方式呢?
能请大家说一下业界的习惯是什么吗?
————————————————————————————
(Question 5) 我在查这些资料的时候还有看到一下关键字:
Thread-Safe
Non Thread-Safe
上述这两个东西好像也会影响我们选择用哪种方式去做宣告,但是小弟我看了资料也不是
很了解,还请各位帮忙一下!
最后感谢大家的回答,和花时间看这篇!