Collections Framework 資料結構

Java 的資料型別與例外狀況

Jim White

Java Instructor

什麼是 framework

  • Framework 是一組可重用的型別,提供通用功能
    • 型別範例:類別與介面
    • 提升應用程式品質
    • 免去從零開始開發
  • 在 Java 以套件提供 Framework
  • Framework 附有使用準則與規範

Framework 提供預先寫好的程式碼以支援通用功能

1 Photo by Ashkan Forouzani on Unsplash
Java 的資料型別與例外狀況

Java 型別

Java 中有兩類 型別

  • 基本型別
    • byte、short、int、long、float、double、char、boolean
  • 參考型別
    • 類別(Classes)
    • 介面(Interface)
    • 列舉(Enums)
    • 陣列(Arrays)
    • ...
Java 的資料型別與例外狀況

Collections Framework

  • Collections Framework:Java 內建的一組泛型資料結構型別
    • 一套用來儲存與操作「一組物件」的型別
  • 定義於 java.util 套件中
    • 使用這些型別時必須匯入 import
Java 的資料型別與例外狀況

那陣列呢?

  • Java 陣列可容納一組物件或基本型別
    • Collections Framework 提供另一套資料結構
  • 兩者各有優缺點
Arrays Collections
不可調整大小 可動態調整(可增可減)
可存放基本型別或物件 只存放物件
同質:元素必須同型 異質:物件可不同
[] 特殊語法存取元素 以方法存取物件
{} 特殊語法初始化 使用 new(無特殊初始化語法)
Java 的資料型別與例外狀況

Collections Framework 類型

  • Collections Framework 分為兩大類:CollectionMap
    • 由兩個介面表示:java.util.Collectionjava.util.Map
    • 兩者都有多個實作類別
  • 使用 import java.util.*; 可使用任何 Collections Framework 型別

Collections Framework 有兩大類:Collection 與 Map

Java 的資料型別與例外狀況

Collection

  • Collection 定義多種物件分組方式
    • 由其他介面進一步界定
  • 有序物件群組:List
  • 無序物件群組:Set
  • 先進先出群組:Queue
    • 像銀行或售票口的排隊
  • .add(Object).remove(Object) 修改任何 Collection

Collection 包含 List、Set 和 Map

Java 的資料型別與例外狀況

Map

  • Map 資料結構像電話簿或字典
    • 「key」物件 -> 「value」物件
    • 電話簿:姓名 -> 電話號碼
    • 字典:單字 -> 詞義
  • 使用 key 物件來操作 Map
    • .put(Object key, Object value) 新增至 Map
    • .remove(Object key) 由 Map 移除
  • Map 類型很多,例如 HashMap

Map 資料結構如同電話簿或字典運作

Java 的資料型別與例外狀況

泛型(Generics)

  • Collections 與 Maps 皆為「參數化」
    • 以 Java 泛型指定 CollectionMap 中的物件型別
    • 泛型語法:<Class> 參數化型別。
      • < > 稱為菱形運算子
ArrayList<String> list = new ArrayList<String>();  // 使用泛型建構
Java 的資料型別與例外狀況

泛型與型別安全

  • 泛型可提升型別安全
    • 限制可放入 CollectionMap 的物件
ArrayList<String> list = new ArrayList<String>();
list.add("hello");  // 加入 String 可以
list.add(new Integer(5));  // 嘗試加入 Integrer 會造成編譯錯誤
Java 的資料型別與例外狀況

未使用泛型

ArrayList list2 = new ArrayList();  // 合法但未指定型別

list2.add("hello");                 // 現在可加入任意型別的物件
list2.add(new Integer(5));
Java 的資料型別與例外狀況

變數宣告與指派

  • 變數宣告與指派可分開進行
ArrayList<String> list = new ArrayList<String>(); //單行宣告並指派

ArrayList<String> list2;    // 變數宣告…
list2 = new ArrayList<String>();  //… 指派可分成 2 個敘述
Java 的資料型別與例外狀況

一起來練習吧!

Java 的資料型別與例外狀況

Preparing Video For Download...