Java基礎-今日內容介紹(collection、map集合框架、可變參數

2020-12-19 大牛之路

今天我們對集合框架進行一下總結,首先看一下集合框架的結構

Java集合框架

Collection知識點: Collection接口中的方法、是集合中所有實現類必須擁有的方法。比如:

1.boolean remove(Object o)移除集合中指定的元素。

2.Object[] toArray() 集合中的元素,轉成一個數組中的元素, 集合轉成數組

集合轉成數組

3.void clear() 清空集合中的所有元素。

清空操作

List知識點:List集合是可變數組,繼承Collection接口。List接口特點: 有序,有索引,可以重複元素。相關操作:

set(int index, E)//修改指定索引上的元素, 返回被修改之前的元素。

List的Set方法

remove(int index)//移除指定索引上的元素、 返回被刪除之前的元素。

List的remove方法

add(int index, E)// 將元素插入到列表的指定索引上,帶有索引的操作,防止越界問題.

List的add方法

ArrayList知識點:底層數組實現,查詢快,增刪慢。 默認10個元素。LinkedList 知識點:底層鍊表實現,增刪塊,查詢慢,LinkedList提供大量對首尾的操作(removeFirst、removeLast、getFirst、getLast、addFirst、addLast)。子類的特有功能,不能多態調用。他們線程都不安全,因此運行速度快。

值得注意的是:就是在遍歷的過程中,使用了集合方法修改了集合的長度,不允許的,稱為並發修改異常。

並發修改異常

Set集合知識點:Set接口,特點不重複元素,沒索引,Set接口的實現類:

HashSet (哈希表),特點: 無序集合,存儲和取出的順序不同,沒有索引,不存儲重複元素,代碼的編寫上,和ArrayList完全一致,hashset底層就是hashmap 默認16 個元素。

不允許重複

HashSet集合的自身特點:底層數據結構是哈希表(通過hashCode進行存儲),存儲,取出都比較快 、 線程不安全,運行速度快。

LinkedHashSet:LinkedHashSet 基於鍊表的哈希表實現。 繼承自HashSet。雙向鍊表實現。LinkedHashSet 自身特性,具有順序,存儲和取出的順序相同的 線程不安全的集合,運行速度塊

(hashset 取出不一定按順序,LinkedHashSet取出是有序的,但是都不允許重複)

對於自定義對象判斷是否重複,需要重寫 hashcode 和equals方法。我們先看看String類是如何判斷重複的

先查看hashcode是否一樣(不同的元素hash值有可能一樣,哈希表默認長度是16,加載因子是0.75,此時性能最好),當HashCode一樣的時候,我們再調用equals方法判斷是否相等。當我們需要判斷自定義對象的時候,我們需要告訴計算機我們是如何判斷的。

自定義對象判斷重複

然後再Person類裡面重寫hashCode和equals方法

重寫hashCode和equals(可以代碼自動生成,也可以自己寫)

值得注意的一點:

Map集合關鍵詞:鍵值對。Map有多個子類,這裡我們主要講解常用的HashMap集合、LinkedHashMap集合。

HashMap集合實例:

hashmap的remove方法

hashmap的get方法

Map集合的遍歷:keySet然後get值來遍歷(不能保證順序)。增強for不能遍歷map 但是可以遍歷set

map集合的遍歷方式

entryset方法獲取鍵值對的關係對象來遍歷(不能保證順序)

entryset方法獲取鍵值對的關係對象

如果map的鍵(key)是自定義對象,就需要重寫hashcode和equals方法來保證鍵(key)的唯一性;

重寫hashcode和equals方法來保證鍵(key)的唯一性

我們可以看到,當鍵值重複的時候,後面一個覆蓋前面一個(person類已經重寫了hashcode和equals方法來保證鍵(key)的唯一性,這個和前面的一樣)

LinkedHashMap繼承HashMap保證迭代的順序。

保證迭代的順序。

Collections:集合操作的工具類實例

方法的可變參數: JDK1.5新的特性,方法的可變參數

* 前提: 方法參數數據類型確定,參數的個數任意

* 可變參數語法: 數據類型...變量名

* 可變參數,本質就是一個數組

最後拋出一個問題吧,map集合裡是可以存map的(map存的是鍵值對),map存map有點像PHP 的二維數組。

假設一個學校對應兩個班級,一個班級對應兩個學生(學號+姓名)。

即 學校有兩個班的名字(兩個鍵key),通過名字(鍵key)找到班級。班級的學生都有學號(鍵key)對應姓名(值)。

因此就需要多遍歷一次。具體方式代碼有點多,還是使用 keyset或者entrySet方式,參考前面map的遍歷方式。

相關焦點

  • 程式設計師:一文掌握java集合框架的Collection接口
    集合可以看作是一種容器,用來存儲對象信息。所有集合類都位於java.util包下,但支持多線程的集合類位於java.util.concurrent包下。(1)長度不固定,是可擴容的(可變的)(2)支持多種數據的存儲結構:有序的,無序的,可重複的,不可重複的,一對一的,一對多的(3)JDK在數組和鏈式的基礎上設計了很多有用的容器集合集合的分類
  • java基礎教程:Collection集合,Collection 常用API
    集合:集合是java中提供的一種容器,可以用來存儲多個數據。集合和數組既然都是容器,它們有什麼區別呢?數組的長度是固定的。集合的長度是可變的。集合存儲的都是引用數據類型。如果想存儲基本類型數據需要存儲對應的包裝類型。集合常用類的繼承體系Collection:單列集合類的根接口,用於存儲一系列符合某種規則的元素,它有兩個重要的子接口,分別是java.util.List和java.util.Set。其中,List的特點是元素有序、元素可重複。
  • JAVA多線程 集合同步
    原文連結:http://www.javamadesoeasy.com/2015/12/how-to-synchronize-arraylist-in-java-to.html幾乎所有的集合非線程安全的?
  • Java集合List和Map面試題以及答案
    前言首先介紹Set、List以及Map接口。List接口是繼承collection父接口的,它是按照對象的進入順序進行保存的,因此,它可以能對列表中的每個元素進行存入和刪除的位置,能夠精確地控制。list保存的數據是可以重複的,list的子類有LinkedList、Vrctor和ArrayList集合。Set接口也是和List一樣繼承Collection接口。Set在數學上的意義就是集合的概念,他和List不一樣的是,不允許集合中的元素重複。
  • 給Java新手的一些建議——Java知識點歸納(Java基礎部分)
    寫這篇文章的目的是想總結一下自己這麼多年來使用java的一些心得體會,主要是和一些java基礎知識點相關的,所以也希望能分享給剛剛入門的Java程式設計師和打算入Java開發這個行當的準新手們,希望可以給大家一些經驗,能讓大家更好學習和使用Java。這次介紹的主要內容是和J2SE相關的部分,另外,會在以後再介紹些J2EE相關的、和Java中各個框架相關的內容。
  • ...Java數據結構List,Set,Map,Spring執行流程,Spring MVC組件
    這裡對今日的內容進行總結:分布式鎖具備的條件:具備的條件:在分布式系統環境下,一個方法在同一時間只能被一個機器的一個線程執行。高可用的獲取鎖與釋放鎖。List,Set,Map特點ListArrAyListArrayList是Java集合框架中使用最多的一個類,是一個數組隊列,線程不安全集合。
  • 新手學Java編程應該學那些Java基礎知識
    這塊內容其實還有很多,目前只是暫時歸納了這幾個在這裡:  包括有:  equals , hashcode , string/stringbuffer ,final , finally , finalize  10.集合框架  這個是一個需要多加掌握的部分,做java開發,可以說沒有不用到集合框架的,這很重要。
  • Java集合框架——面試必備
    Java集合框架面試題常見集合集合可以看作是一種容器,用來存儲對象信息。數組和集合的區別:(1)數組長度不可變化而且無法保存具有映射關係的數據;集合類用於保存數量不確定的數據,以及保存具有映射關係的數據。
  • 程式設計師:java集合介紹,帶你深入理解list集合
    Java集合介紹作為一個程序猿,Java集合類可以說是我們在工作中運用最多、最頻繁的類。相比於數組(Array)來說,集合類的長度可變,更加方便開發。Java集合就像一個容器,可以存儲任何類型的數據,也可以結合泛型來存儲具體的類型對象。
  • java學習之高級語法——Set 集合
    java.util.HashSet 集合 implements Set接口HashSet 接口的特點:(3)是一個無序集合,存儲元素和取出元素的順序可能不一致(4)底層是一個哈希表結構,特點是 「 查詢速度快 」
  • Java 那些最常用的工具類庫|原力計劃
    // 普通集合的創建List<String> list = Lists.newArrayList();Set<String> set = Sets.newHashSet();// 不可變集合的創建ImmutableList
  • JAVA反序列化 - commons-collections - 1
    如欲轉載或傳播此文章,必須保證此文章的完整性,包括版權聲明等全部內容。未經雷神眾測允許,不得任意修改或者增減此文章內容,不得以任何方式將其用於商業目的。從那時起,它已經成為Java中公認的集合處理標準。Apache Commons Collections是一個擴展了Java標準庫裡的Collection結構的第三方基礎庫,它提供了很多強有力的數據結構類型並且實現了各種集合工具類。作為Apache開源項目的重要組件,Commons Collections被廣泛應用於各種Java應用的開發。
  • java集合詳解合集
    Java集合類基本概念在編程中,常常需要集中存放多個數據。從傳統意義上講,數組是我們的一個很好的選擇,前提是我們事先已經明確知道我們將要保存的對象的數量。一旦在數組初始化時指定了這個數組長度,這個數組長度就是不可變的,如果我們需要保存一個可以動態增長的數據(在編譯時無法確定具體的數量),java的集合類就是一個很好的設計方案了。
  • Java基礎面試題簡單總結
    Java 程式語言只有值傳遞參數。當一個對象實例作為一個參數被傳遞到方法中時,參數的值就是對該對象的引用。JAVA類實現序例化的方法是實現java.io.Serializable接口Collection框架中實現比較要實現Comparable 接口和 Comparator 接口33、STRING與STRINGBUFFER的區別。
  • Java中壓縮集合,你都知道哪幾種方式?
    前言這個問題算是開發當中偶爾會遇到的一個小問題,比如如何將兩個集合壓縮成為一個邏輯集合。如果你不理解,我們可以看一個簡單的例子,去說明什麼是壓縮集合。本文文章不長,但是還算是比較實用的小技巧。主要內容來源於國外小哥Baeldung的博客這位大佬雖然寫的很詳細,但是有一些細節小問題,我在此基礎之上,實地驗證了一遍,發現有幾個坑,不過已經填完了。
  • 黑馬程式設計師:Java集合類重點是List集合、Set集合習題
    習題總結:本問的習題內容注意要是圍繞Java當中常用集合類,從Collection、Map根接口開始。重點在於List集合、Set集合、Map集合之間的區別。通過習題的內容,我們需要掌握各種集合類的使用場景,以及需要注意的細節。掌握泛型的使用以及工具類。
  • Java之Collections集合工具類的方法使用(上)
    各位小夥伴們大家好,這次小編要介紹的是Collections集合工具類,java.utils.Collections是集合工具類,用來對集合進行操作。super T>):將集合中元素按照指定規則排序。在這篇文章中,小編主要介紹前面Collections集合工具類的兩種方法,在集合中添加元素和打亂集合中元素的順序。
  • JavaSE—集合框架
    聲明:本欄目所使用的素材都是凱哥學堂VIP學員所寫,學員有權匿名,對文章有最終解釋權;凱哥學堂旨在促進VIP學員互相學習的基礎上公開筆記。集合框架:System.arraycopy:1.數組對象2.從第幾個下表開始拷貝3.接受的數組對象4.從第幾個下表開始存放5.要拷貝多長使用System.arraycopy
  • Java Web前端到後臺常用框架介紹
    簡單的說,dubbo就是個服務框架,如果沒有分布式的需求,其實是不需要用的,只有在分布式的時候,才有dubbo這樣的分布式服務框架的需求,並且本質上是個服務調用的東東,說白了就是個遠程服務調用的分布式框架。
  • Java 基礎知識面試題與知識點總結!(100題)
    Java 基礎知識面試題與知識點知識點:Java基礎知識Java數據類型 Java字符串 Java運算 Java面向對象 Java關鍵字 Java反射 Java異常 Java泛型 Java註解Java集合框架List Set Map ArrayList Linked List HashMap HashSet ConcurrentHashMap