Java資料結構之表的增刪對比---ArrayList與LinkedList之一

來源:互聯網
上載者:User

標籤:進一步   for   個數   []   min   例子   資料結構   set   get   

一、Java_Collections表的實現

  與c不同Java已經實現並封裝了現成的表資料結構,順序表以及鏈表。

  1、ArrayList是基於數組的實現,因此具有的特點是:1.有索引值方便尋找,對於get和set操作花費常數時間,2.但是其缺點是:插入/刪除某個資料的代價比較大。

      2、LinkedList是基於雙鏈表實現,因此具有的特點是:1.基於鏈表方便插入與刪除操作開銷較小,2.但是不方便索引,不管是索引哪一個元素都需要從頭開始逐次尋找。

就增刪操作下面舉個簡單例子:給出一個表(具體實現未知),將該表中偶數值的項刪除,比如該表中的元素為:1,2,3,4,5,調用該方法後得到元素:1,3,5

//-----------------------------------------------------------

//該代碼主要是用來說明順序表與鏈表在增刪上的操作消耗

 1 import java.util.ArrayList; 2 import java.util.Iterator; 3 import java.util.LinkedList; 4 import java.util.List; 5 import java.util.ListIterator; 6  7 /** 8  * 找到一個表list中偶數值的項,並刪除 下面顯示逐漸最佳化的過程 對比順序表:arrayList與LinkedList。自己把握 9  * 10  * @author Administrator11  * 12  */13 public class RemoveEvens {14     public static void main(String[] args) {15         List<Integer> list = new ArrayList<>();16         list.add(1);17         list.add(2);18         list.add(3);19         list.add(4);20 21         // removeEvensVer2(list);22 23         for (int i : list) {24             System.out.println(i);25         }26     }27 28     // 基礎版本29     /*30      * 對於ArrayList集合,get方法雖然較快,但是remove的時間消耗為二次時間,31      * 對於linkedlist集合,暴露兩個問題首先是對get的調用效率不是很高因此常式花費二次時間,而且同時對remove32      * 的調用同樣低效,因為要到達i的代價是昂貴的。33      */34     public static void removeEvensVer1(List<Integer> list) {35 36         int i = 0;37         // 遍曆列表,獲得每一個元素38         while (i < list.size()) {39             // 當前項是偶數,就移除40             if (list.get(i) % 2 == 0) {41                 list.remove(i);42             } else {43                 i++;44             }45         }46     }47 48     // 迭代器版本增強版本,避免並發修改異常49     // 對於linkedlist的迭代器的remove方法只消耗常數時間項,該方法對於arraylist仍是無可救藥50     51     public static void removeEvensVer2(List<Integer> list) {52         Iterator<Integer> iterator = list.iterator();53         while (iterator.hasNext()) {54             if (iterator.next() % 2 == 0) {55                 iterator.remove();56             }57         }58     }59 60     // 並發修改異常,一般這裡會出現,主要是由於迭代器的引用失效61     public static void removeEvensVer3(List<Integer> list) {62         // ListIterator<Integer> listIterator = list.listIterator();63         //增強for本質上是使用迭代器實現,而list的remove方法導致list發生變化,進一步導致原list的迭代器引用64         //發生變化,導致並發異常。65         for (Integer x : list) {66             if (x % 2 == 0) {67                 list.remove(x);68             }69         }70     }71 }

 

Java資料結構之表的增刪對比---ArrayList與LinkedList之一

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.