??前面的話??
本篇文章帶大家認識Java基礎知識——集合框架,從本篇文章開始正式拉開資料結構的序幕,要深入了解一件事,那必然先得見個面,本文帶大家認識Java集合框長什么樣,以及怎么使用Collection和Map介面,
📒博客主頁:未見花聞的博客主頁
🎉歡迎關注🔎點贊👍收藏??留言📝
📌本文由未見花聞原創,CSDN首發!
📆首發時間:🌴2022年1月16日🌴
??堅持和努力一定能換來詩與遠方!
💭參考書籍:📚《Java核心技術》,📚《Java編程思想》,📚《Effective Java》
💬參考在線編程網站:🌐牛客網🌐力扣
博主的碼云gitee,平常博主寫的程式代碼都在里面,
博主的github,平常博主寫的程式代碼都在里面,
🙏作者水平很有限,如果發現錯誤,一定要及時告知作者哦!感謝感謝!
📌導航小助手📌
- 1.初見集合框架
- 2.Collection
- 3.Map

1.初見集合框架
官方檔案是這么介紹集合框架的,集合框架是用于表示和操縱集合一個統一架構,所有集合框架都包含以下內容:
介面:這些是代表集合的抽象資料型別,介面允許獨立于其表示的細節來操作集合,在面向物件的語言中,介面通常形成層次結構,
實作:這些是集合介面的具體實作,本質上,它們是可重用的資料結構,
演算法:這些是對實作集合介面的物件執行有用計算的方法,例如搜索和排序,這些演算法被稱為是多型的:也就是說,相同的方法可以用于適當集合介面的許多不同實作,本質上,演算法是可重用的功能,
除了 Java 集合框架,集合框架最著名的例子是 C++ 標準模板庫 (STL) 和 Smalltalk 的集合層次結構,
參考鏈接:官方集合框架介紹
Java 集合框架 Java Collection Framework ,又被稱為容器 container ,是定義在java.util包下的一組介面 interfaces和其實作類 classes ,通俗說,集合框架就是由許許多多的介面,類,它們之間通過一系列的繼承和擴展關系連接構建成一個“網”,稱作框架,這些介面和類提供了多種組織資料的方式和方法,其中資料的組織方式就是資料結構,提供的方法包含對資料結構的增刪查改和排序方法,這些方法可以由不同的演算法來實作,比如說排序有冒泡,選擇,插入,希爾,桶,快速,堆,計數排序演算法等等,
簡單來說,集合框架就是由介面,抽象類,實作類組成的,這些類和介面里面實作了資料結構,

Java中,集合框架大致如圖所示:

根據這張組成圖,Iterable介面主要用于使用增強for回圈for-each,所以實作Iterable 介面的資料結構可以使用for-each進行遍歷,如List表示線性結構,Queue表示佇列,Set表示集合,上述三種介面都擴展了這個介面,所以這幾類的資料結構都是可以使用for-each回圈的,但是Map介面是單獨的,表示鍵值對,這類資料結構是不可以使用for-each回圈的,Collection介面其實就是用來管理物件的,根據這張圖知道該介面除了沒有被鍵值對實作,其他的所有資料結構都實作了該介面,所以該介面是可以管理多種資料結構物件的,這些物件也被稱為元素,
對于實作類,根據實作不同的介面形成了不同的資料結構,比如ArrayList(順序表),LinkedList(鏈表與佇列),Stack(堆疊)等等,基本上集合框架包含了大部分的資料結構,在后續博文都會一一介紹,除了這些,集合框架還提供了不少工具,比如迭代器,比較器等等,

Java集合框架的大致面貌就是這樣,具體怎么使用及部分資料結構的實作在后續博文都會講到,
2.Collection
前面已經了解了Java集合框架的大致面貌,相信你已經對集合有了一定的認知,趁熱打鐵,來學習一下框架中Collection的使用吧!
大多數的資料結構實作了該介面(除了鍵值對),那也意味著,Collection介面可以接受多種實作類的參考,從而Collection常常用來管理物件,各實作類也能夠使用該介面當中的方法,但總體上Collection介面用的不多,

了解更多Collection:官方Collection說明
不準備將該介面中所有的方法都一一列舉,這里就說明一些常用的方法吧!
| 方法 | 說明 |
|---|---|
| boolean add(E e) | 將元素 e插入集合中 |
| void clear() | 洗掉集合中的所有元素 |
| boolean isEmpty() | 判斷集合是否沒有任何元素,俗稱空集合 |
| boolean remove(Object e) | 如果元素 e 出現在集合中,洗掉其中一個 |
| int size() | 回傳集合中的元素個數 |
| Object[] toArray() | 回傳一個裝有所有集合中元素的陣列 |
絕大多數的資料結構都實作了Collection介面,這里就以ArrayList為例吧!
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
public class Test {
public static void main(String[] args) {
Collection<Integer> coll = new ArrayList<>();
//添加元素
coll.add(115);
coll.add(2022);
coll.add(4848);
//ArrayList有實作toString方法,因此可以使用參考名輸出整個集合元素
System.out.println(coll);
//獲取元素個數
System.out.println(coll.size());
//轉換成陣列,回傳陣列型別是Object[]
Object[] arr = coll.toArray();
System.out.println(Arrays.toString(arr));
//判斷并洗掉元素e
System.out.println(coll.remove(4848));
System.out.println(coll);
//清空集合
coll.clear();
System.out.println(coll);
//判斷集合是否為空
System.out.println(coll.isEmpty());
}
}
運行結果:

3.Map
Map介面能夠接受鍵值對相關的資料結構物件的參考,這里就介紹一些常見的方法吧!
所謂鍵值對就是一個key對應一個val,其他部分語言稱為字典,多個鍵值對組成的集合稱為地圖,

想知道更多不妨看看官方對Map的說明:Map官方說明
常用的方法:
| 方法 | 說明 |
|---|---|
| V get(Object k) | 根據指定的 key 查找對應的 val |
| V getOrDefault(Object k, V defaultValue) | 根據指定的 key 查找對應的 val,沒有找到用默認值代替 |
| V put(K key, V value) | 將指定的 key-val 放入 Map |
| boolean containsKey(Object key) | 判斷是否包含 key |
| boolean containsValue(Object value) | 判斷是否包含 value |
| Set<Map.Entry<K, V>> entrySet() | 將所有鍵值對回傳成一個集合 |
| boolean isEmpty() | 判斷map是否為空 |
| int size() | 回傳鍵值對的數量 |
注意,上述方法中的V,K表示泛型的意思,這里你只要知道使用泛型可以傳遞型別就可以了,后續博文會陸續說明泛型,
舉例使用HashMap舉例,它是使用哈希表所實作的鍵值對,
插入鍵值對——put方法
import java.util.HashMap;
import java.util.Map;
public class TestMap {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
//插入鍵值對
map.put("1024","程式員節");
map.put("大年初一", "春節");
map.put("一月一日", "元旦節");
System.out.println(map);
}
}

我們會發現,鍵值對的順序與我們插入的順序不一致,這是因為HashMap是利用哈希表實作的,對key進行哈希映射存盤到對應索引的哈希表位置上,所以插入的先后不決定鍵值對的儲存順序,
根據key查找val——get,getgetOrDefault(沒找到使用默認值代替)
import java.util.HashMap;
import java.util.Map;
public class TestMap {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
//插入鍵值對
map.put("1024","程式員節");
map.put("大年初一", "春節");
map.put("一月一日", "元旦節");
//根據key查找val
System.out.println(map.get("1024"));
System.out.println(map.getOrDefault("正月十五", "元宵節"));
}
}

判斷是否包含key或val——containsKey,containsValue
import java.util.HashMap;
import java.util.Map;
public class TestMap {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
//插入鍵值對
map.put("1024","程式員節");
map.put("大年初一", "春節");
map.put("一月一日", "元旦節");
//是否包含key
System.out.println(map.containsKey("1024"));//true
System.out.println(map.containsKey("正月十五"));//false
//是否包含val
System.out.println(map.containsValue("春節"));//true
System.out.println(map.containsValue("元宵節"));//false
}
}

將全部鍵值對轉換成集合—— entrySet()
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class TestMap {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
//插入鍵值對
map.put("1024","程式員節");
map.put("大年初一", "春節");
map.put("一月一日", "元旦節");
//全部鍵值對轉集合
Set<Map.Entry<String, String>> set = map.entrySet();
for(Map.Entry<String, String> kv: set) {
System.out.println("日期: " + kv.getKey() + " 節日: " + kv.getValue());
}
}
}

獲取地圖中鍵值對個數以及判斷地圖是否為空——size,isEmpty
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class TestMap {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
//插入鍵值對
map.put("1024","程式員節");
map.put("大年初一", "春節");
map.put("一月一日", "元旦節");
//獲取鍵值對數目以及判斷地圖是否為空
System.out.println(map.size());
System.out.println(map.isEmpty());
}
}

好了,本文到這里也該結束了,下次再見!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/413405.html
標籤:java
