摘要:集合類主要負責保存盛裝其他數據,因此集合類也被稱為容器類。所有的集合類都位于包下。表示一組對象,這些對象也稱為的元素。成員方法把集合轉成數組迭代器,集合的專用遍歷方式之接口概述有序的,也稱為序列。
前言
在編程中,常常需要集中存放多個數據。從傳統意義上講,數組是我們的一個很好的選擇,前提是我們實現已經明確知道我們將要保存的對象的數量。
一旦在數組初始化時指定了數組長度,這個數組長度就是不可變的,如果我們需要保存一個可以動態增長的數據,在編譯時無法確定具體的數量,java的集合類就是一個很好的設計方案。
集合類概述:面對對象語言對事物的體現都是以對象的形式,所以為了方便對多個對象的操作,Java就提供類集合類。
數組和集合類都是容器,不同之處:
(1)數組雖然也可以存儲對象,但長度是固定的;集合的長度是可變的。 (2)數組中可以存儲基本數據類型,集合只能存儲對象。
集合類特點:集合只用于存儲對象,集合長度可變,集合可以存儲不同類型的對象。
集合類主要負責保存、盛裝其他數據,因此集合類也被稱為容器類。
所有的集合類都位于java.util包下。
細數java集合,其中比較常見的就是List、Set、Map、和Queue,在這四者中,除了Map,其他三個接口都繼承于Collection。
CollectionCollection接口概述:Collection層次結構中的根接口。
Collection表示一組對象,這些對象也稱為collection的元素。
一些collection允許有重復的元素,而另一些不允許;一些collection是有序的,而另一些則是無序的。
成員方法:
(1)boolean add(E e) (2)boolean remove(Object o) (3)void clear() (4)boolean contains(Object o) (5)boolean isEmpty() (6)int size() (7)boolean addAll(Collection c) (8)boolean removeAll(Collection c) (9)boolean containsAll(Collection c) (10)boolean retainAll(Collection c) (11)把集合轉成數組:Object[] toArray() (12)迭代器,集合的專用遍歷方式:Iterator iterator()Collection之List接口
概述:有序的collection,也稱為序列。
List接口在java集合類中充當的是一個元素有序、元素可重復的集合角色。
繼承于Collection集合,所以擁有Collection集合的所有方法。
List集合也擁有屬于自己的方法:用來實現根據元素索引來操作集合元素的作用。
此接口的用戶可以對列表中的每個元素的插入位置進行精確的控制。
用戶可以根據元素的整數索引(在列表中的位置)訪問元素,并搜索列表中的元素。
成員方法:
(1)void add(int index,E element) (2)E remove(int index) (3)E get(int index) (4)E set(int index,E element) (5)ListIterator listIterator()常見的繼承List接口的實用類
ArrayList:
(1)基于數組實現的List類,封裝了一個動態的、允許再分配的Object[]數組 (2)ArrayList用initialCapacity參數來設置該數組的長度,當長度超過預設值后,ArrayList會動態增加。 (3)ArrayList類是線程不安全的,如果要保證該集合的同步性,必須在程序中手動保存。 (4)底層數據結構是數組,查詢快,增刪慢 (5)線程不安全,效率高 (6)增刪慢也是在數據量較大的情況下,在數據量較小的情況下,ArrayList()不一定比LinkedList()方法慢。 (7)另外,ArrayList在末尾插入和刪除數據的話,速度反而比LinkedList要快。
LinkedList:
(1)底層數據結構是鏈表,查詢慢,增刪快。 (2)除了繼承List接口外,LinkedList接口也繼承了Deque接口,所以也可以當作棧和隊列(雙向)來使用。 (3)成員方法: 【1】public void addFirst(E e)及addLast(E e) 【2】public E getFirst()及getLast() 【3】public E removeFirst()及public E removeLast()
Vector:
(1)底層數據結構是數組,查詢快,增刪慢 (2)Vector與Array List十分的相像,都是基于數組實現的List類,也是封裝了一個動態分配的Object[]數組,也可以使用initialCapacity參數來設置數組的長度。 (3)Vector是線程安全的,因此性能差
Stack:
(1)Stack是繼承Vector的子類,它主要是用來模擬棧,因此也具備了peek()、pop()、push()等主要用于棧操作的方法。 (2)Stack也是線程安全的,因此性能差
使用List集合的建議:
(1)遍歷集合元素。ArrayList和Vector使用get()方法來獲取遍歷元素,LinkedList應該采用迭代器來遍歷集合元素。 (2)插入和刪除。當這類操作較多的時候,優先考慮使用LinkedList。 (3)多線程。當需要使用到多線程的ArrayList時,可以使用Collections將該集合類包裝成線程安全的集合。Collection之Set接口
一個不包含重復元素的collection。
Set接口是一個無序的、不可重復的集合。
Set集合中加入數據元素時,Set集合通常不用記住元素的添加順序。
當兩個相同元素加入到一個Set集合中,則添加操作失敗。
常見的繼承Set接口的實用類
HashSet:
(1)按照hash算法來存儲集合中的元素,因此具有良好的存取和查找功能。 (2)無序的,非線程同步的,集合元素可以是null (3)HashSet集合存儲過程: 【1】當向HashSet集合中存入一個元素時,HashSet會調用該對象的hashCode()方法來得到該對象的hashCode值,然后根據該值決定該對象在HashSet中的存儲位置。 【2】如果有兩個元素通過equals()方法返回true,但他們的hashCode()方法返回值不相等,HashSet也會將其存儲在不同的位置。 【3】也就是說:HashSet的添加元素判斷標準是:兩個對象通過equals()方法比較相等,并且兩個對象的hashCode()方法返回值也相等。
LinkedHashSet:
(1)元素有序并且唯一。 (2)由鏈表保證元素有序。 (3)由哈希表保證元素唯一。 (4)LinkedHashSet是繼承HashSet的子類。
TreeSet:
(1)使用元素的自然順序對元素進行排序。 (2)或者根據創建set時提供的Comparator進行排序。 (3)TreeSet是SortedSet接口的實現類,所以TreeSet可以確保集合元素處于排序狀態。 (4)TreeSet使用紅黑樹來維護集合元素的次序。如果實現comparator()方法,可以實現定制排序。如果采用自然排序,則返回null。
EnumSet:
(1)專為枚舉類設計的集合類 (2)所有元素都必須是指定枚舉類型的枚舉值,該枚舉類型在創建EnumSet顯式或隱式的指定。 (3)EnumSet在內部以位向量的形式存儲,十分緊湊高效,因此EnumSet對象占用內存小,并且運行效率高 (4)該集合元素中不允許加入null元素。Map接口
該接口無法繼承Collection接口,主要原因還是因為Map是用來存儲具有映射關系的數據。
Map中保存著兩組值。一組值用來保存Map中的Key,另外一組用來保存Map里的value。
值得注意的是,Map中的Key不能重復,判斷標準是同一個Map對象的任何兩個Key通過equals方法比較總是返回false
成員方法:
(1)V put(K key,V value) (2)V remove(Object key) (3)void clear() (4)boolean containsKey(Object key) (5)boolean containsValue(Object value) (6)boolean isEmpty() (7)int size()
Map接口和Collection接口的不同:
(1)Map是雙列的,Collection是單列的 (2)Map的健是唯一的,Collection的子體系Set是唯一的 (3)Map集合的數據結構值針對健有效,跟值無關 (4)Collection集合的數據結構是針對元素有效的常見的繼承Map接口的實用類
HashMap:
(1)線程不安全,并且HashMap中可以使用null作為key或者value (2)key是哈希表結構,可以保證健的唯一性
LinkedHashMap:
(1)LinkedHashMap使用一個雙向鏈表來維護key-value對的次序 (2)LinkedHashMap是一個有序的Map集合,順序與key-value對的插入順序保持一致 (3)具有可預知的迭代順序
TreeMap:
(1)TreeMap是一個紅黑樹的結構,每個key-value作為紅黑樹的一個節點 (2)TreeMap也會對key進行排序,也分為自然排序和定制排序兩種 (3)健的紅黑樹結構,可以保重健的排序和唯一性Iterator
Iterator概述:對collection進行迭代的迭代器,依賴于集合而存在
凡是實現了Collection接口的集合類,都有一個Iterator方法,用于返回一個實現了Iterator接口的對象,用于遍歷集合。
成員方法:
(1)boolean hasNext() (2)E next() (3)remove()參考鏈接
https://www.cnblogs.com/zhouy...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77081.html
摘要:哪吒社區技能樹打卡打卡貼函數式接口簡介領域優質創作者哪吒公眾號作者架構師奮斗者掃描主頁左側二維碼,加入群聊,一起學習一起進步歡迎點贊收藏留言前情提要無意間聽到領導們的談話,現在公司的現狀是碼農太多,但能獨立帶隊的人太少,簡而言之,不缺干 ? 哪吒社區Java技能樹打卡?【打卡貼 day2...
摘要:新特性概述系列一安裝及使用系列二運行系列三模塊系統精要系列四更新系列五系列六系列七系列八系列九與的區別遷移注意事項參數遷移相關選項解析使用構建實例使用示例帶你提前了解中的新特性 Java語言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的新特性 Java10的新特性 Java11的新特性 Java12的新特性 Java13的新特性...
摘要:工具包提供了強大的數據結構這一節,我們來學習下的數據結構。枚舉接口定義了一種從數據結構中取回連續元素的方式。六字典字典類是一個抽象類,它定義了鍵映射到值的數據結構。哈希表鍵的具體含義完全取決于哈希表的使用情景和它包含的數據。 Java工具包提供了強大的數據結構,這一節,我們來學習下Java的數據結構。 一、數據結構分類 枚舉(Enumeration) 位集合(BitSet) 向量(V...
摘要:導讀閱讀本文需要有足夠的時間,筆者會由淺到深帶你一步一步了解一個資深架構師所要掌握的各類知識點,你也可以按照文章中所列的知識體系對比自身,對自己進行查漏補缺,覺得本文對你有幫助的話,可以點贊關注一下。目錄一基礎篇二進階篇三高級篇四架構篇五擴 導讀:閱讀本文需要有足夠的時間,筆者會由淺到深帶你一步一步了解一個資深架構師所要掌握的各類知識點,你也可以按照文章中所列的知識體系對比自身,對自己...
摘要:我的是忙碌的一年,從年初備戰實習春招,年三十都在死磕源碼,三月份經歷了阿里五次面試,四月順利收到實習。因為我心理很清楚,我的目標是阿里。所以在收到阿里之后的那晚,我重新規劃了接下來的學習計劃,將我的短期目標更新成拿下阿里轉正。 我的2017是忙碌的一年,從年初備戰實習春招,年三十都在死磕JDK源碼,三月份經歷了阿里五次面試,四月順利收到實習offer。然后五月懷著忐忑的心情開始了螞蟻金...
閱讀 2209·2021-11-22 15:29
閱讀 4098·2021-11-04 16:13
閱讀 991·2019-08-29 16:58
閱讀 338·2019-08-29 16:08
閱讀 1456·2019-08-23 17:56
閱讀 2378·2019-08-23 17:06
閱讀 3166·2019-08-23 16:55
閱讀 2058·2019-08-23 16:22