集合的總結

来源:https://www.cnblogs.com/xiangkejin/archive/2018/07/11/9297071.html
-Advertisement-
Play Games

List List:有序(存入和取出的順序一致),元素都有索引值,元素可以重覆。 * Set:元素不能重覆,無序。 * **** List:特有的常見方法:有一個共性的特點就是可以操作角標。 *1.添加 * void add(); * * 2.刪除 * Object remove(index) * ...


List

List:有序(存入和取出的順序一致),元素都有索引值,元素可以重覆。
* Set:元素不能重覆,無序。
*
**** List:特有的常見方法:有一個共性的特點就是可以操作角標。
*1.添加
* void add();
*
* 2.刪除
* Object remove(index)
*
* 3.修改
* Object set (index,element)
*
* 4.獲取
* Object get(index)
* int indexOf(object)
* List subList(from,to)
* List:
* 1.Vector 內部是數組數據結構,是同步的。增刪,查詢都很慢。
* 2.ArrayList:內部是數組數據結構,是不同步的。替代了Vector。查詢的速度快。
* 3.LinkedList:內部是鏈表數據結構,是不同步的。增刪元素的速度是很快的。
除了實現 List 介面外,LinkedList 類還為在列表的開頭及結尾 get、remove 和 insert 元素提供了統一的命名方法。
這些操作允許將鏈接列表用作堆棧、隊列或雙端隊列。

Set
Set:元素不可以重覆,是無序,並且最多包含一個 null 元素
  |--TreeSet:可以對Set集合中的元素進行排序,是不同步的
  判斷元素唯一性的方法:就是根據比較方法返回是否是0。

TreeSet對元素進行排序的方式之一:
讓元素自身具備比較功能,元 素就需要實現Comparable介面。覆蓋compareTo方法。
如果不要按照對象中具備的自然順序進行排序。如果對象中不具備自然順序,可以使用
TreeSet集合的第二種排序方式之二:
TreeSet不能直接對元素進行比較,它是根據元素的比較結果排序,如果元素不具備比較功能,讓集合自身具備比較功能。
定義一個類實現Comparator介面,覆蓋compare方法。
將該類對象作為參數傳遞給TreeSet集合的構造函數。

集合的一些技巧:
需要唯一嗎?
需要:Set
  需要制定順序:
  需要:TreeSet
  不需要:HashSet
但是想要一個和存儲一致的順序:LinkedHashSet


不需要:List
List有著和存儲一致的順序
  需要頻繁增刪嗎?
  需要:LinkedList
  不需要:ArrayList

Map
Map:一次添加一對元素。Collection一次添加一個元素
Map也稱為雙列集合,Collection集合稱為單列集合
其實map集合中存儲的就是鍵值對。

map集合中必須保證鍵的唯一性。
常用方法:
1.添加
  value put (key,value):返回前一個和key關聯的值,如果沒有返回null
2.刪除
  void clear():清空map集合
  value remove():根據指定的key翻出這個鍵值對
3.判斷
  boolean containsKey(key)
  Boolean contiansValue(value)
  Boolean isEmpty()
4.獲取
  value get(key):通過鍵獲取值,如果沒有該鍵返回null
  當然可以通過返回null,來判斷是否包含指定鍵,

5.獲取大小

  int size():獲取鍵值對的個數。

Map常用的子類:
  |---Hashtable:內部結構是哈希表,是同步的。不允許null作為鍵,null作為值。

  |--Properties:用來存儲鍵值對的配置文件的信息,可以和io技術相結合。

  |---HashMap:內部結構是哈希表,不是同步的。允許null作為鍵,null作為值。

  |---LinkdedHashMap:內部結構是哈希表和鏈表,迭代順序和存儲數據一致,不是同步的。

  |---TreeMap:內部結構是紅黑樹,不同步,可以對Map集合中的鍵進行排序。

編程技巧:當TreeMap被填充後,就可以調用keySet(),取得key組成的Set,然後使用toArray()方法生成key的數組(集合collection中的類都有toArray()方法),接下來使用Array的binarySearch()方法在已排序的數組中快速查找對象。


如何記錄每個容器的結構和所屬體系?
看名字:
List
ArrayList
LinkedList

Set
HashSet
TreeSet
尾碼名即是該集合的體系。
首碼名即是該集合的數據結構。
看到array就要想到數組,就要想到查詢快,有角標。
看到link就要想到鏈表,就要想到增刪快,就要 add remove
看到hash就要想到哈希表,就要想到唯一性,就要想到元素覆蓋hashcode和equals方法
看到tree就要想到二叉樹,就要想到排序,就要想到兩個介面Comparator,Comparable
而且通常這些常用的集合容器都是不同步的。


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

-Advertisement-
Play Games
更多相關文章
  • 本文介紹整數編碼,主要討論無符號整數和有符號整數的編碼不同所帶來的一些理解上的問題。無符號整數編碼很容易理解,因其沒有符號位,在二進位無符號整數轉為十進位數時,每一位上的數字(0或1)乘以該為的權值2w-1(w從1開始),然後相加即可。對於有符號整數,最高位為符號位,符號位的權值決定了正負。有符號整 ...
  • 一、什麼是繼承 繼承是一種創建類的方法,在python中,一個類可以繼承來自一個或多個父。原始類稱為基類或超類。 二、什麼時候使用繼承 在已經創建的幾個類中,這幾哥類中的方法和變數有相同的,這種時候我們就可以使用類的繼承,將其它類中已有的方法和變數通過繼承的方式,在新創建的類中,使用正常的方式就可以 ...
  • defer 匿名函數特性 執行方式類似其它語言中的析構函數,在函數體執行結束後按照調用順序的 逐個執行 即使函數發生 也會執行,類似於try...except 常用於 資源清理,文件關閉,解鎖以及記錄時間等操作 支持匿名函數的調用 通過於匿名函數配合可在return之後修改函數計算的結果 如果函數體 ...
  • 其實我是一直都想早點兒寫點兒學習筆記的,但是太懶了一直拖到了今天,好吧我已經學習了java一個月了,說一下自己的學習經歷,當做一遍複習和鞏固了! 使用cmd在開始運行欄上列印出來: 然後下麵有幾個關於黑視窗的小技巧記一下: a.清屏:cls; 例如:C:\ >cls,然後按回車鍵。 b.切換盤符:: ...
  • 1 CRM項目外觀 1 CRM項目外觀 1. 開發環境 IDE: Eclipse Mars2 Jdk: 1.7 資料庫: MySQL 2. 創建資料庫 資料庫sql文件位置如下圖: 創建crm資料庫,執行sql 效果如下圖: 3. 工程搭建 使用的Bootstrap前端框架,官方網站 http:// ...
  • 題目: 逆波蘭表達式是一種把運算符前置的算術表達式,例如普通的表達式2 + 3的逆波蘭表示法為+ 2 3。逆波蘭表達式的優點是 運算符之間不必有優先順序關係,也不必用括弧改變運算次序,例如(2 + 3) * 4的逆波蘭表示法為* + 2 3 4。本題求解逆波蘭 表達式的值,其中運算符包括+ - * / ...
  • 前言 JVM在準備面試的時候就有看了,一直沒時間寫筆記。現在到了一家公司實習,閑的時候就寫寫,刷刷JVM博客,刷刷電子書。 學習JVM的目的也很簡單: 能夠知道JVM是什麼,為我們幹了什麼,具體是怎麼乾的。能夠理解到一些初學時不懂的東西 在面試的時候有談資 能裝逼 一、簡單聊聊JVM 1.1先來看看 ...
  • 前言 本篇文章主要講述 SpringBoot 整合 Jsp 以及 SpringBoot 整合 Thymeleaf ,實現一個簡單的用戶增刪改查示例工程。事先說明,這兩個是單獨整合的,也就是兩個工程。如需其中一個,只需看相應部分的介紹即可。若需工程源代碼,可以直接跳到底部,通過鏈接下載工程代碼。 Sp ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...