java常用集合小結

来源:http://www.cnblogs.com/admol/archive/2016/01/13/5127823.html
-Advertisement-
Play Games

Listpublic interface Listextends Collection有序的 collection(也稱為序列),允許重覆的元素。常用實現類:ArrayList:底層使用的是數組結構,特點:查詢速度快,增刪操作較慢,而且線程不同步.要保證同步,可以使用:List list = Col...


List

public interface List<E>extends Collection<E>
有序的 collection(也稱為序列),允許重覆的元素。
常用實現類:

  • ArrayList:
    底層使用的是數組結構,特點:查詢速度快,增刪操作較慢,而且線程不同步.
    要保證同步,可以使用:List list = Collections.synchronizedList(new ArrayList());進行包裝,預設容量為10.
    常用方法:add,addAll,remove,indexOf,subList,contains,isEmpty

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    List<String> list = new ArrayList<String>();
    list.add("0");
    list.add("1");
    list.add("2");
    list.add("3");
    list.add("4");
    for (int i = 0; i < list.size(); i++) {
    list.remove(i);
    }
    System.out.println(list); //1,3

    容易忽略的方法:trimToSize()//修正容量大小,用多少,給多少,ensureCapacity(int minCapacity)//預設大小
    自定義ArrayList:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    /**
    * 簡單模擬ArrayList
    * @author admol
    */
    public class MyArrayList {
    private Object[] data;
    private int size;

    public MyArrayList() {
    this(10);
    }

    public MyArrayList(int i) {
    data = new Object[i];
    }

    /**
    * 返回擁有的元素數
    * @return
    */
    public int size() {
    return size;
    }

    /**
    * 獲取指定位置上的元素
    * @param i
    * @return
    */
    public Object get(int i) {
    return data[i];
    }

    /**
    * 添加元素
    * @param obj
    */
    public void add(Object obj) {
    //存儲空間已滿,需要擴容
    if (data.length == size) {
    Object[] temp = new Object[size + (size >> 1)];
    //數組複製:(被覆制的數組,從第幾個元素開始複製,複製到的目標數組,粘貼的開始位置,需要複製元素個數)
    System.arraycopy(data, 0, temp, 0, size);
    data = temp;
    }
    //存儲空間未滿
    data[size++] = obj;
    }

    /**
    * 刪除指定位置的元素
    * @param i
    */
    public void remove(int i) {
    //例:共10個元素,要刪除的元素下標為3,實際上是從下標4開始向下標3複製粘貼(10-3-1)元素
    System.arraycopy(data, i + 1, data, i, size - i - 1);
    size--;
    }

    /**
    * 刪除指定元素
    * @param obj
    */
    public void remove(Object obj) {
    for (int i = 0; i < size; i++) {
    if (data[i].equals(obj)) {
    remove(i);
    return;
    }
    }
    }
    }
  • LinkedList
    使用雙向鏈表實現存儲,允許所有元素(包括 null)。非線程安全,要保證同步,可以使用List list = Collections.synchronizedList(new LinkedList());進行包裝,可以被當作堆棧和隊列來使用。

  • Vector
    也是一個有序集合,允許重覆元素,並且線程安全.

Map

  • HashMap
    基於哈希表的 Map 介面的實現,存儲鍵值對,鍵是唯一的,允許使用 null 值和 null 鍵,非同步(除了非同步和允許使用 null 之外,HashMap 類與 Hashtable 大致相同),同步可以使用Map m = Collections.synchronizedMap(new HashMap(...));
    常用方法:
    1. 添加。 put(key,value):當存儲的鍵相同時,新的值會替換老的值,並將老值返回。如果鍵沒有重覆,返回null。 void putAll(Map);
    2. 刪除。 void clear():清空 value remove(key) :刪除指定鍵。
    3. 判斷。 boolean isEmpty(): boolean containsKey(key):是否包含key boolean containsValue(value) :是否包含value
    4. 取出。 int size():返回長度 value get(key) :通過指定鍵獲取對應的值。如果返回null,可以判斷該鍵不存在。 當然有特殊情況,就是在hashmap集合中,是可以存儲null鍵null值的。
      Collection values():獲取map集合中的所有的值。
  • HashTable
    底層是哈希表數據結構,不可以存入null鍵null值,是線程同步的.
    Hashtable 的實例有兩個參數影響其性能:初始容量 和載入因數(預設.75)

Set

  • HashSet
    底層數據結構是哈希表(實際上是一個 HashMap 實例),允許使用 null 元素,唯一且無序,非線程安全.通過元素的hashcode和equals來保證元素的唯一性。如果元素的hashcode值相同,才會判斷equals是否為true; 如果元素的hashcode的值不同,不會調用equals。

Collections

提供對集合進行操作的一個包裝器,實現對集合的查找、排序、替換、 線程安全化(將非同步的集合轉換成同步的)等操作。常用方法:
Collections.max(list);//返回list中字典順序最大的元素。
int index = Collections.binarySearch(list,”zz”);//二分查找,返回角標。必須是有序的
Collections.fill();//可以將list集合中的所有元素替換成指定元素。
Collections.repalceAll(list,”要被替換的”,”替換的值”);//可以將list集合中的指定元素替換成指定元素。 Collections.reverse(); 反轉
Collections.reverseOrder(參數是比較器);//逆向反轉排序。倒序。。
Collections.shuffle(list);//隨機對list中的元素進行位置的置換。
synchronizedXXX(XXX);非同步集合轉成同步集合的方法:

Arrays

用於操作數組對象的工具類,裡面都是靜態方法。
Arrays.asList:可以從 Array 轉換成 List。可以作為其他集合類型構造器的參數。
Arrays.binarySearch:在一個已排序的或者其中一段中快速查找。
Arrays.copyOf:如果你想擴大數組容量又不想改變它的內容的時候可以使用這個方法。
Arrays.copyOfRange:可以複製整個數組或其中的一部分。
Arrays.deepEquals、Arrays.deepHashCode:Arrays.equals/hashCode的高級版本,支持子數組的操作。
Arrays.equals:如果你想要比較兩個數組是否相等,應該調用這個方法而不是數組對象中的 equals方法(數組對象中沒有重寫equals()方法,所以這個方法之比較引用而不比較內容)。
Arrays.fill:用一個給定的值填充整個數組或其中的一部分。
Arrays.hashCode:用來根據數組的內容計算其哈希值(數組對象的hashCode()不可用)。
Arrays.sort:對整個數組或者數組的一部分進行排序。也可以使用此方法用給定的比較器對對象數組進行排序。
Arrays.toString:列印數組的內容。

關係圖

a


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

-Advertisement-
Play Games
更多相關文章
  • GitHub日報:每天新開源的優秀項目;天碼營:部分精彩的博客和實用的經驗;張開濤springMVC博客
  • 1.C++里大寫TRUE和小寫true區別true是bool型的;TRUE是int型的,VC里這個是ms自己定義的;C++規定不允許只通過返回類型不同區別兩個函數2.MFC中的”false“和 “FALSE"有沒區別?有區別。false是bool類型的值,一個位元組大小。而FALSE是BOOL類型的值...
  • 打開文件的步驟如下:彈出打開文件對話框 -> 獲取選擇的文件,並將文件顯示在視圖中。我們程式中經常需要定製的操作如下:1. 定製彈出的文件對話框,例如需要修改打開文件的類型或擴展名2. 定製文件顯示的行為3. 定製文件打開後的行為1. CWinApp::OnFileOpen它是ID_FILE_OPE...
  • 1、簡介 Ruby是日本的Yukihiro Matsumoto寫的,簡單易學的面向對象的腳本語言,像perl一樣,有豐富的文字處理、系統管理等豐富 功能,但是ruby要簡單,容易理解和擴充。跟python很類似,但是在國內遠沒有python有名。Ruby是一種功能強大的面向對象的腳本語言,可以使用它...
  • Day2010 創建java文件列表11 Properties簡述12 Properties存取13 Properties存取配置文件14 Properties練習15 PrintWriter16 合併流17 切割文件10 創建java文件列表練習:將一個指定目錄下的java文件的絕對路徑,存儲到一...
  • 北京尚學堂提供本文並不會對所有命令進行詳細講解,只給出常見用法和解釋。具體用法可以使用--help查看幫助或者直接通過google搜索學習。1.查找文件find / -name filename.txt根據名稱查找/目錄下的filename.txt文件。find . -name "*.xml"遞歸查...
  • AOP的介紹AOP(Aspect-OrientedProgramming,面向方面編程)AOP的幾個概念1.切麵(Aspect):切麵就是一個關註點的模塊化,如事務管理、日誌管理、許可權管理等;2.連接點(Joinpoint):程式執行時的某個特定的點,在Spring中就是一個方法的執行;3.通知(A...
  • 一、預備知識—程式的記憶體分配 一個由C/C++編譯的程式占用的記憶體分為以下幾個部分 1、棧區(stack)— 由編譯器自動分配釋放 ,存放函數的參數值,局部變數的值等。其 操作方式類似於數據結構中的棧。 2、堆區(heap) — 一般由程式員分配釋放, 若程式...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...