Java基礎——ArrayList與LinkedList(一)

来源:http://www.cnblogs.com/1693977889zz/archive/2017/06/24/7073900.html
-Advertisement-
Play Games

一、定義 ArrayList和LinkedList是兩個集合類,用於儲存一系列的對象引用(references)。 引用的格式分別為: 1 ArrayList<String> list = new ArrayList<String>(); 1 LinkedList<Integer> list = n ...


一、定義

ArrayList和LinkedList是兩個集合類,用於儲存一系列的對象引用(references)。

引用的格式分別為:

 1 ArrayList<String> list = new ArrayList<String>(); 

 1 LinkedList<Integer> list = new LinkedList<Integer>(); 

二、ArrayList與LinkedList的大致區別

1.ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構;

2.對於隨機訪問get和set,ArrayList優先於LinkedList。因為LinkedList要移動指針。

3.對於新增和刪除操作(add和remove),LinkedList比較占優勢,因為ArrayList要移動數據。

(關於3,網上又爭論,意思是說對大型數據的增刪,收尾增刪或對中間某位作用,效果是不同的,有待考證!)

三、ArrayList與LinkedList常用方法

代碼實例:

 1 import java.util.ArrayList;
 2 
 3 public class CollT2 {
 4 
 5     public static void main(String[] args) {
 6 
 7         // 新建一個ArrayList
 8         ArrayList<String> list = new ArrayList<String>();
 9         System.out.println("初始化大小:" + list.size());
10 
11         // 添加元素
12         list.add("北京");
13         list.add("天津");
14         list.add("上海");
15         list.add("廣州");
16         list.add("深圳");
17         list.add("海口");
18         list.add("廈門");
19         System.out.println("當前容量:" + list.size());
20 
21         // 講ArrayList的大小和實際所含元素的大小設置一致
22         // 註意:此操作演示下麵會拋出的異常:java.util.ConcurrentModificationException
23         list.trimToSize();
24 
25         // 遍歷
26         for (String string : list) {
27             System.out.println(string);
28 
29             // 在指定位置插入元素
30             list.add(2, "黑龍江");
31             for (String string1 : list) {
32                 System.out.println(string1);
33             }
34             System.out.println("=======分割線========");
35 
36             // 清空list
37             list.clear();
38             for (String string3 : list) {
39                 System.out.println(string3);
40             }
41 
42         }
43     }
44 }

  1 import java.util.LinkedList;
  2 
  3 //ArrayList基於數組實現,所以它具備數組的特點,即查詢速度較快,但是修改、插入的速度卻有點兒慢。
  4 //下麵將要介紹的LinkedList就是來解決這個問題的,LinkedList基於鏈表,與ArrayList互補。
  5 //所以實際開發中我們應該按照自己的需求來定到底用哪一個。
  6 
  7 //LinkedList底層採用雙向迴圈列表實現,進行插入和刪除操作時具有較高的速度.
  8 //我們還可以使用LinkedList來實現隊列和棧
  9 
 10 public class CollT3 {
 11     @SuppressWarnings("null")
 12     public static void main(String[] args) {
 13 
 14         // 創建一個list
 15         LinkedList<Integer> list = new LinkedList<Integer>();
 16         LinkedList<Integer> list2 = new LinkedList<Integer>();
 17         LinkedList<Integer> list3 = new LinkedList<Integer>();
 18         LinkedList<Integer> list4 = new LinkedList<Integer>();
 19         
 20         System.out.println(list.size());
 21 
 22         // 添加元素
 23         // list.add("鍋包肉");沒考慮數據類型
 24         // list.add("溜肉段");
 25         System.out.println("====分割線1====");
 26 
 27         list.add(5);
 28         list.add(6);
 29         list.add(7);
 30         list.add(8);
 31         list.add(9);
 32         list.add(10);
 33 
 34         list2.add(-1);
 35         list2.add(-2);
 36         list2.add(-3);
 37         list2.add(-4);
 38         list2.add(-5);
 39 
 40         list3.add(111);
 41         list3.add(222);
 42         list3.add(333);
 43         list3.add(444);
 44         list3.add(555);
 45         
 46         list4=null;
 47 
 48         System.out.println(list.size());
 49 
 50         // 遍歷
 51         for (Integer a : list) {
 52             System.out.println(a);
 53         }
 54 
 55         list.add(4, 11111);
 56         System.out.println(list);// 竟然是橫著列印出來的
 57         System.out.println("===分割線2====");
 58 
 59         list.add(3, 22222);
 60         System.out.println(list);// 二次驗證竟然是橫著列印出來的
 61 
 62         System.out.println("===分割線3====");
 63         System.out.println(list.addAll(list2));
 64         System.out.println(list);
 65 
 66         System.out.println("===分割線4====");
 67         // 錯誤:System.out.println(2,list.addAll(list3));
 68         list.addAll(2, list3);// 將指定 collection 中的所有元素從指定位置開始插入此列表。
 69         System.out.println(list);
 70 
 71         System.out.println("===分割線5====");
 72         list3.addFirst(3);//需要單獨列印
 73         System.out.println(list3);
 74         
 75         System.out.println("===分割線6====");
 76         list3.addLast(0000000001);//1
 77         list3.addLast(000000000);//0
 78         list3.addLast(0);//0
 79         //list3.addLast(00000000000000009);//The literal 00000000000000009 of type int is out of range 
 80         list3.addLast(0000000000000000000000000000000000007);//末尾只能寫到7,8和9不行
 81         System.out.println(list3);
 82         
 83         list.clear();
 84         System.out.println(list);//[]
 85         
 86         System.out.println("===分割線7====");
 87         
 88         list2.clone();//返回此 LinkedList的淺表副本。
 89         System.out.println(list);
 90         
 91         System.out.println("===分割線8====");
 92         //list3.contains(999999999);//呃,竟然不是這麼驗證的!!!!
 93         System.out.println(list3.contains(999999999));// 如果此列表包含指定元素,則返回 true。
 94         
 95         System.out.println("===分割線9====");
 96         //list3.element();//呃,竟然不是這麼驗證的!!!!
 97         System.out.println(list3.element());//獲取但不移除此列表的頭(第一個元素)。
 98         System.out.println(list3);//驗證上面的操作真的只是獲取沒有移除
 99         
100         System.out.println("===分割線10====");//註意上面對list3的操作,給它頭位添加個3了
101         System.out.println(list3.get(2));// 返回此列表中指定位置處的元素。
102         
103         System.out.println("===分割線11====");
104         System.out.println(list3.getFirst());//返回此列表的第一個元素。
105         System.out.println(list3.getLast());//返回此列表的最後一個元素。
106         
107         System.out.println("===分割線12====");
108         System.out.println(list3.indexOf(333));//返回此列表中首次出現的指定元素的索引,如果此列表中不包含該元素,則返回 -1。
109         System.out.println(list3.indexOf(10));
110         
111         System.out.println("===分割線13====");
112         list3.add(333);
113         list3.add(333);
114         list3.add(333);
115         System.out.println(list3);
116         System.out.println(list3.lastIndexOf(0));//返回此列表中最後出現的指定元素的索引,如果此列表中不包含該元素,則返回 -1。
117         System.out.println(list3.lastIndexOf(9));//-1
118         
119         System.out.println("===分割線14====");
120         list3.offer(6);//將指定元素添加到此列表的末尾(最後一個元素)。
121         System.out.println(list3.offer(6));//true
122         System.out.println(list3);
123         
124         System.out.println("===分割線15====");
125         System.out.println(list3.peek());// 獲取但不移除此列表的頭(第一個元素)。
126         
127         //peekFirst();獲取但不移除此列表的最後一個元素;如果此列表為空,則返回 null。
128         //System.out.println(list4.peekFirst());上面list4定義為null,黃色報錯。用了@SuppressWarnings("null")。驗證:java.lang.NullPointerException
129         //System.out.println(list4.peekLast());java.lang.NullPointerException
130         
131         System.out.println("===分割線16====");
132         System.out.println(list3);
133         list3.poll();
134         System.out.println(list3);
135         
136         System.out.println("===分割線17====");
137         System.out.println(list3);
138         list3.toArray();//返回以適當順序(從第一個元素到最後一個元素)包含此列表中所有元素的數組。
139         System.out.println(list3);
140     }
141 
142 }

列印結果:

0
====分割線1====
6
5
6
7
8
9
10
[5, 6, 7, 8, 11111, 9, 10]
===分割線2====
[5, 6, 7, 22222, 8, 11111, 9, 10]
===分割線3====
true
[5, 6, 7, 22222, 8, 11111, 9, 10, -1, -2, -3, -4, -5]
===分割線4====
[5, 6, 111, 222, 333, 444, 555, 7, 22222, 8, 11111, 9, 10, -1, -2, -3, -4, -5]
===分割線5====
[3, 111, 222, 333, 444, 555]
===分割線6====
[3, 111, 222, 333, 444, 555, 1, 0, 0, 7]
[]
===分割線7====
[]
===分割線8====
false
===分割線9====
3
[3, 111, 222, 333, 444, 555, 1, 0, 0, 7]
===分割線10====
222
===分割線11====
3
7
===分割線12====
3
-1
===分割線13====
[3, 111, 222, 333, 444, 555, 1, 0, 0, 7, 333, 333, 333]
8
-1
===分割線14====
true
[3, 111, 222, 333, 444, 555, 1, 0, 0, 7, 333, 333, 333, 6, 6]
===分割線15====
3
===分割線16====
[3, 111, 222, 333, 444, 555, 1, 0, 0, 7, 333, 333, 333, 6, 6]
[111, 222, 333, 444, 555, 1, 0, 0, 7, 333, 333, 333, 6, 6]
===分割線17====
[111, 222, 333, 444, 555, 1, 0, 0, 7, 333, 333, 333, 6, 6]
[111, 222, 333, 444, 555, 1, 0, 0, 7, 333, 333, 333, 6, 6]

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 題目描述 魯賓遜先生有一隻寵物猴,名叫多多。這天,他們兩個正沿著鄉間小路散步,突然發現路邊的告示牌上貼著一張小小的紙條:“歡迎免費品嘗我種的花生!――熊字”。 魯賓遜先生和多多都很開心,因為花生正是他們的最愛。在告示牌背後,路邊真的有一塊花生田,花生植株整齊地排列成矩形網格(如圖1)。有經驗的多多一 ...
  • 1. JVM簡介 初識JVM JVM是Java Virtual Machine(Java虛擬機)的縮寫,JVM是一種用於計算設備的規範,它是一個虛構出來的電腦,是通過在實際的電腦上模擬模擬各種電腦功能來實現的。 Java語言的一個非常重要的特點就是與平臺的無關性。而使用Java虛擬機是實現這一 ...
  • ./Factory.class.php ./match_list_c.php ./MatchModel.class.php ./Model.class.php ./MySQLDB.class.php ./template/.htaccess Deny from All ./template/matc ...
  • 題目描述 現給定n個閉區間[ai, bi],1<=i<=n。這些區間的並可以表示為一些不相交的閉區間的並。你的任務就是在這些表示方式中找出包含最少區間的方案。你的輸出應該按照區間的升序排列。這裡如果說兩個區間[a, b]和[c, d]是按照升序排列的,那麼我們有a<=b<c<=d。 請寫一個程式: ...
  • 今天練習ArrayList與LinkedList,在網上看到有關它倆應用效率的題型。覺得很有價值,保留一下。 附加: 遇到java類型後面跟三個點是代表的情況了,就補充一下: 相關參考鏈接: http://pengcqu.iteye.com/blog/502676 ...
  • 全球最大的軟體製造商微軟2月12日警告公眾稱其一部分珍貴的Windows NT和Windows 2000操作系統源代碼被泄漏到了一些線上文件共用網路中。 微軟稱被泄漏的代碼只是整個程式的一小部分,但這沒有阻止出於好奇心和懷有惡意的人設法將其納入囊中。考慮到2月13日在互聯網文件共用網路中交換的文件大 ...
  • 一個開發者,如何才能更值錢? 答案非常簡單:掌握稀缺資源。 那麼,怎樣才能持續不斷地掌握稀缺資源,讓自己更值錢呢? 請看接下來介紹的 2 種識別稀缺的方法和 2 種培養稀缺的策略。 稀缺資源的秘密 資源有很多,比如知識、技能、關係、社會資源、信息、天賦等等,哪種資源才是稀缺的呢? 答案可能不在資源本 ...
  • 頁面報錯: 後臺錯誤: Field error in object 'user' on field 'birthday': rejected value [2013-06-24]; codes [typeMismatch.user.birthday,typeMismatch.birthday,typ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...