1. 程式人生 > >第15章 Java集合框架

第15章 Java集合框架

在這裡插入圖片描述

第15章 Java集合框架

Java集合類概述 定義:集合類存放的都是物件的引用,而非物件本身,稱集合中的物件就是指集合中物件的引用(reference)。 通俗的說,集合就是一個放資料的容器,準確的說是放資料物件引用的容器。 集合型別主要有3種:set(集)、list(列表)和map(對映)。 Set(集): Set集合中,不能包含重複元素 List(列表): List是一個有序的,且存放元素是可以重複的一個集合 Map(對映): 物件容器中的元素包含一對"鍵物件-值物件"對映,其中鍵物件不能重複,值物件可以重複 Java集合框架中提供的幾個介面 介面SortedSet為Set型別容器提供排序功能 介面SortedMap是為Map型別容器提供對鍵物件的排序 介面Iterator提供了對集合物件進行遍歷訪問的遍歷器 介面Comparable和Comparator用來實現集合中物件的排序

Collection介面和Iterator介面

Collection介面的方法 定義:Collection 是最基本的集合介面,一個 Collection 代表一組 Object,即 Collection 的元素, Java不提供直接繼承自Collection的類,只提供繼承於的子介面(如List和set)。是Set介面和List介面的父介面 Collection 介面儲存一組不是唯一的,無序的物件。 int size();返回當前集合中包含的元素個數 boolean add(Object o);向集合中新增到某一元素 boolean remove(Object o);從集合中刪除某一元素 boolean contains(Object o);判斷集合中是否包含某一指定元素

Iterator介面的方法 定義:Iterator介面是一種用於遍歷集合的介面。所謂遍歷,是指從集合中取出每一個元素的過程。在Collection介面中,有一個iterator()方法,通過該方法可以返回一個Iterator物件。通過這個物件,可以遍歷集合中所有元素 hasNext() 如果集合中還有更多元素,該方法返回true next() 返回集合中的下一個元素 remove() 刪除iterator返回的最後一個元素

List介面中的方法 void add(int index, Object o) 在列表指定的位置插入物件 boolean addAll(int index, Collection c) 將另一個集合中的所有物件插入到列表指定位置 Object get(int index) 返回列表中指定位置的物件 Object set(int index, Object o) 用指定物件替換列表中指定位置的物件 Object remove(int index) 刪除列表指定位置的物件 LinkedList是實現了雙向連結串列功能的列表,它將列表中的每個物件放在獨立的空間中,而且每個空間中還儲存有上一個和下一個連結的索引

Set介面 Set介面也繼承自Collection介面,同時也繼承了Collection介面的全部方法, 元素可能有順序,也可能沒有順序,因為元素可能沒有順序,所以不能基於索引訪問Set中的元素 Set集合中,不能包含重複元素 HashSet HashSet類是基於雜湊演算法的Set介面實現 特點: 當遍歷HashSet時,其中的元素是沒有順序的 HashSet中不允許出現重複元素 允許包含null元素

Map介面 Map(對映)介面是Java集合框架中不同於Collection介面的另一個重要介面,它對應的是在一種從鍵(Key)到值(Value)的對應關係的集合。也就是說,Map型別的物件容器裡面儲存著兩組物件,一組物件用於儲存Map裡的Key,另外一組用於儲存Value。Key和Value可以是任何引用型別的資料。Key不能重複,但是Value可以重複 Map 介面儲存一組鍵值物件,提供key(鍵)到value(值)的對映。 TreeMap 繼承了AbstractMap,並且使用一顆樹 reeSet集合中,只能存放相同型別的資料 集合中的元素,必須要實現Comparable介面,並重寫compareTo() //TreeSet底層是TreeMap,但是TreeMap是採用二叉樹的結構來儲存資料 //在二叉樹中,比較元素時,比樹中元素小的,永遠在下一代的左邊 //當然,比樹中元素大的,永遠在下一代的右邊,相等的,就直接覆蓋 //二叉樹結構,見 https://blog.csdn.net/github_26672553/article/details/77185003

Hashtable 、HashMap HashMap底層是陣列+單向連結串列的結構,陣列用於存放鍵的hash值,而連結串列用於儲存k-v結構 //陣列構成了HashMap中的Hash表,表的大小預設是16,可以存放的資料是16載入因子0.75 //當超過160.75個數據時,Hash表將自動擴容,擴容的後的大小是16*2^nHashMap中,如果是我們的自己定義的類的物件,做為鍵的時候,必須要重寫hashcode()和equals() //當然上層的HashSet,也同理 Hashtable 和 HashMap 的區別 1、Hashtable是執行緒安全的,HashMap是執行緒非安全 2、HashMap中允許存放空鍵(只能出現1次),空值,但是Hashtable中不允許出現空鍵,空值

比鍵 Set keys = map.keySet();//返回鍵的集合 Object key = iterator.next();//得到鍵了

工具類Collections和Arrays 沒有s的分別代表集合和陣列,而加個s後代表工具類

Collections類 Java集合框架中提供了一個操作Set、List和Map等集合的工具類Collections,該工具類中提供了大量方法,用於對集合元素進行排序、查詢、修改等操作

Collections類中提供了多個靜態方法用於建立執行緒安全的同步集合:

		synchronizedCollection(Collection c):返回一個執行緒安全的collection
		synchronizedList(List list):返回一個執行緒安全的list
		synchronizedSet(Set s):返回一個執行緒安全的set
		synchronizedMap(Map m):返回一個執行緒安全的map

Arrays類 Java集合框架不僅提供了Collections類用於操作集合,同時也提供了Arrays類用於運算元組。Arrays類包含用來運算元組(比如排序和搜尋)的各種方法 ArrayList底層是基於陣列結構的集合,使用陣列的複製,來完成集合的擴容或縮容 但是:ArrayList底層是基於陣列結構來實現的,查詢資料較快,操作資料較慢 LinkedList,底層是基於連結串列結構來實現的,操作資料上較快,查詢資料較慢 ,Vector 同ArrayList一樣,也是基於陣列結構來實現的,但是區別在於它執行緒安全

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述