LinkedList?的作者說他自己都不用?LinkedList?
時(shí)間:2021-11-15 14:30:59
手機(jī)看文章
掃描二維碼
隨時(shí)隨地手機(jī)看文章
[導(dǎo)讀]今天在網(wǎng)上沖浪,看到有文章說LinkedList的作者說他自己都不用LinkedList,我就特意去翻了翻他的推特,發(fā)現(xiàn)他確實(shí)說過這話!可能這就是大佬吧,我造輪子,但是我不用!或者這就是傳說中的廚子不吃自己做的菜?不扯了,言歸正傳。其實(shí)我個(gè)人覺得大佬說好像是事實(shí),因?yàn)樵跇I(yè)務(wù)上好像...
今天在網(wǎng)上沖浪,看到有文章說 LinkedList 的作者說他自己都不用 LinkedList,我就特意去翻了翻他的推特,發(fā)現(xiàn)他確實(shí)說過這話!

- 數(shù)組的隨機(jī)訪問快,插入和刪除慢
- 鏈表的插入刪除快,隨機(jī)訪問慢
- 頻繁增刪的情況下,用鏈表比較合適
- 在隨機(jī)查找多的情況下,用數(shù)組比較合適
public?class?YesArrayLinkedBattle?{
????private?static?final?int?COUNT?=?100000;
????static?List?fillList(List?list) ? {
????????for?(int?i?=?0;?i?????????????list.add(i);?//將list填滿,假裝我們?cè)跀?shù)據(jù)庫里得到這么多數(shù)據(jù)
????????}
????????return?list;
????}
????static?void?randomAdd(List?list,?String?listType) ?{
????????long?t1?=?System.currentTimeMillis();
????????for?(int?i?=?0;?i?????????????list.add(ThreadLocalRandom.current().nextInt(0,COUNT),?i);
????????}
????????long?t2?=?System.currentTimeMillis();
????????System.out.println(listType? "隨機(jī)位置插入"? ?COUNT? ?"次耗時(shí):"? ?(t2-t1));
????}
????public?static?void?main(String[]?args)?{
????????randomAdd(fillList(new?ArrayList<>(COUNT)),?"數(shù)組");
????????randomAdd(fillList(new?LinkedList<>()),?"鏈表");
????}
}
這個(gè)實(shí)驗(yàn)很粗暴簡(jiǎn)單,但也很直觀,分別對(duì)被填滿數(shù)據(jù)的 ArrayList 和 LinkedList 執(zhí)行 10 萬次隨機(jī)的插入操作,然后分別統(tǒng)計(jì)耗時(shí)。執(zhí)行結(jié)果如下:
頻繁增刪的情況下,用鏈表比較合適
當(dāng)然,如果數(shù)據(jù)量很小的話,其實(shí)兩者都是差不多的,比如長(zhǎng)度都為 100 ,執(zhí)行 100 次,則耗時(shí)如下:
