<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • 深入淺析ArrayList和LinkedList的執(zhí)行效率比較

            一、概念:

            創(chuàng)新互聯(lián)專注于企業(yè)網(wǎng)絡營銷推廣、網(wǎng)站重做改版、富縣網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、H5響應式網(wǎng)站、商城網(wǎng)站制作、集團公司官網(wǎng)建設、成都外貿網(wǎng)站建設、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為富縣等各大城市提供網(wǎng)站開發(fā)制作服務。

                一般我們都知道ArrayList* 由一個數(shù)組后推得到的 List。作為一個常規(guī)用途的對象容器使用,用于替換原先的 Vector。允許我們快速訪問元素,但在從列表中部插入和刪除元素時,速度卻嫌稍慢。一般只應該用ListIterator 對一個 ArrayList 進行向前和向后遍歷,不要用它刪除和插入元素;與 LinkedList 相比,它的效率要低許多LinkedList 提供優(yōu)化的順序訪問性能,同時可以高效率地在列表中部進行插入和刪除操作。但在進行隨機訪問時,速度卻相當慢,此時應換用 ArrayList。

            二、測試

                本來自己寫了一些測試類想測試下ArrayList和LinkedList的性能比較,發(fā)現(xiàn)怎么寫都差強人意,今天在《Thinking in Java》中看到了這樣的一段代碼,個人覺得寫得不賴。

            public class ListPerformance
            {
             private static final int REPS = 100;
             private abstract static class Tester//內部抽象類,作為List測試。
             {
              String name;
              int size;
              Tester(String name, int size)
              {
               this.name = name;
               this.size = size;
              }
              abstract void test(List a);
             }
             private static Tester[] tests = {new Tester("get", 300)//一個測試數(shù)組,存儲get(隨機取)、iteration(順序遍歷)、insert(中間插入)、remove(隨機刪除)
             {
              void test(List a)
              {
               for (int i = 0; i < REPS; i++) {
                for (int j = 0; j < a.size(); j++) {
                 a.get(j);
                }
               }
              }
             }, new Tester("iteration", 300)
             {
              void test(List a)
              {
               for (int i = 0; i < REPS; i++) {
                Iterator it = a.iterator();
                while (it.hasNext()) it.next();
               }
              }
             }, new Tester("insert", 1000)
             {
              void test(List a)
              {
               int half = a.size() / 2;
               String s = "test";
               ListIterator it = a.listIterator(half);
               for (int i = 0; i < size * 10; i++) {
                it.add(s);
               }
              }
             }, new Tester("remove", 5000)
             {
              void test(List a)
              {
               ListIterator it = a.listIterator(3);
               while (it.hasNext()) {
                it.next();
                it.remove();
               }
              }
             },
                      };
             public static void test(List a)
             {
              System.out.println("Testing " + a.getClass().getName());//輸出測試的類名稱
              for (int i = 0; i < tests.length; i++) {
               fill(a, tests[i].size);//填充空集合
               System.out.print(tests[i].name);
               long t1 = System.currentTimeMillis();
               tests[i].test(a);//進行測試
               long t2 = System.currentTimeMillis();
               System.out.print(":" + (t2 - t1)+" ms ");
              }
             }
             public static Collection fill(Collection c, int size)
             {
              for (int i = 0; i < size; i++) {
               c.add(Integer.toString(i));
              }
              return c;
             }
             public static void main(String[] args)
             {
              test(new ArrayList());
              System.out.println();
              test(new LinkedList());
             }
            }

            深入淺析ArrayList 和 LinkedList的執(zhí)行效率比較

            三、總結

                首先,真的夸一下,這段代碼寫得真是好啊,無論是內部類的應用還是對面向對象的認識,都考慮的恰到好處,哎,我什么時候才能寫出這么棒的代碼啊。

                測試結果每次都有些許的差異,但不難得出以下的結論:

                    1、在 ArrayList 中進行隨機訪問(即 get())以及循環(huán)反復是最劃得來的 。原因在于,ArrayList是基于數(shù)組而來的,所以每個元素都有其對應的index,所以隨機定位一個元素要快捷的多。

                    2、在 LinkedList 中進行順序訪問、插入、刪除動作的話還是比較高效的。原因在于,插入、刪除的話對于LinkedList來說只需要改變其排列的一個node結點就可以了,而對于ArrayList來說刪除一個元素,需要不斷把后面的元素移到前面的位置上。

                    3、至于順序訪問,之前一直認為ArrayList 基于數(shù)組排列,在內存中是連續(xù)排列的,應該會快得多,然后多次測試發(fā)現(xiàn)并不是想象的那樣,或者說ArrayList沒有表現(xiàn)出它該有的優(yōu)勢,甚至還不如LinkedList的訪問速度。原因在于:LinkedList 提供了優(yōu)化的順序訪問性能。

            總結

            以上所述是小編給大家介紹的ArrayList 和 LinkedList的執(zhí)行效率比較,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對創(chuàng)新互聯(lián)網(wǎng)站的支持!

            網(wǎng)頁標題:深入淺析ArrayList和LinkedList的執(zhí)行效率比較
            本文鏈接:http://www.jbt999.com/article10/pdpsgo.html

            成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、靜態(tài)網(wǎng)站、電子商務、域名注冊、自適應網(wǎng)站、網(wǎng)站改版

            廣告

            聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

            成都網(wǎng)站建設

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 开心久久婷婷综合 | 超碰人人爱人人操 | 手机在线操B视频 | 草逼视频大片 | 亚洲国产精品视频免费看 |