【java讀書筆記】——Collection集合之六大介面(Collection、Set、List、Map、Iterator和Comparable)
兩個月之前準備軟考時,簡單的從理論上總結了最常用的資料結構和演算法,比如:線性表,連結串列,圖。在進行java開發時,jdk為我們提供了一系列相應的類來實現基本的資料結構。jdk所提供的容器API位於java.util包內。本文主要是通過簡單的介紹Collection集合,向讀者簡單闡述各個類的基本定義以及其作用,為後面的學習做一下鋪墊。
首先,我們先看一下Collection集合的基本結構:
1、Collection介面
Collection是最基本集合介面,它定義了一組允許重複的物件。Collection介面派生了兩個子介面Set和List,分別定義了兩種不同的儲存方式,如下:
2、 Set介面
Set介面繼承於Collection介面,它沒有提供額外的方法,但實現了Set介面的集合類中的元素是無序且不可重複。
特徵:無序且不可重複。
3、 List介面
List介面同樣也繼承於Collection介面,但是與Set介面恰恰相反,List介面的集合類中的元素是物件有序且可重複。
特徵:有序且可重複。
兩個重要的實現類:ArrayList和LinkedList
1.ArrayList特點是有序可重複的
2.LinkedList是一個雙向連結串列結構的。
4、Map介面
Map也是介面,但沒有繼承Collection介面。該介面描述了從不重複的鍵到值的對映。Map介面用於維護鍵/值對(key/value pairs)。
特徵:它描述了從不重複的鍵到值的對映。
兩個重要的實現類:HashMap和TreeMap
1.HashMap,中文叫散列表,基於雜湊表實現,特點就是鍵值對的對映關係。一個key對應一個Value。HashMap中元素的排列順序是不固定的。更加適合於對元素進行插入、刪除和定位。
2.TreeMap,基於紅黑書實現。TreeMap中的元素保持著某種固定的順序。更加適合於對元素的順序遍歷。
5、Iterator介面
Iterator接口,在C#裡有例外一種說法IEnumerator,他們都是集合訪問器,用於迴圈訪問集合中的物件。
所有實現了Collection介面的容器類都有iterator方法,用於返回一個實現了Iterator介面的物件。Iterator物件稱作迭代器,Iterator介面方法能以迭代方式逐個訪問集合中各個元素,並可以從Collection中除去適當的元素。
<span style="font-size:10px;">Iterator it = collection.iterator(); // 獲得一個迭代子
while(it.hasNext())
{
Object obj = it.next(); // 得到下一個元素
} </span>
6、Comparable介面
Comparable可以用於比較的實現,實現了Comparable介面的類可以通過實現comparaTo方法從而確定該類物件的排序方式。
總結
Collection集合分別派生自Collection和Map介面,Collection有兩個常用子介面List和Set,分別表示有序可重複,無序不可重複的集合。而Map儲存的是key-value的對映。
上面的總結看上去很多,很繁瑣,其實你只要記得一點:collection是用於處理各種資料結構的,根據各種資料結構的特點理解,一切都會變簡單。
雖然此部落格有點糙,也希望能幫助你對集合的理解有一點點作用(尤其是對組織中人)。下面的博文,我會更新一些有關執行緒的基礎知識,請繼續關注。
相關推薦
【java讀書筆記】——Collection集合之六大介面(Collection、Set、List、Map、Iterator和Comparable)
兩個月之前準備軟考時,簡單的從理論上總結了最常用的資料結構和演算法,比如:線性表,連結串列,圖。在進行java開發時,jdk為我們提供了一系列相應的類來實現基本的資料結構。jdk所提供的
【Java學習筆記】14.集合框架和泛型
1.Java中的集合框架體系 1.集合框架體系圖如圖所示: 2.Conllection介面: Collection 是最基本的集合介面,一個 Collection 代表一組 Object,Ja
【Think in java讀書筆記】序列化
轉換 window 讀書筆記 對象 序列 執行 輕量 body 調用 Java的對象序列化將那些實現了Serializable接口的對象轉換成一個字節序列,並能夠在以後將這個字節序列完全恢復成為原來的對象。 序列化機制能自動彌補不同操作系統之間的差異,也就是說在Window
【Effective Java讀書筆記】創建和銷毀對象(一):考慮使用靜態工廠方法代替構造器
返回對象 boolean 簡化 將不 其他 種類型 bigint color pre 類可以提供一個靜態方法,返回類的一個靜態實例,如Boolean包裝類的一個獲取實例的靜態方法 1 public static Boolean valueOf(boolean b) { 2
【筆記】大數乘法之Karatsuba演算法 (Java BigInteger原始碼)
BigInteger與uint[] 用uint[]來表示非負大數,其中陣列開頭是大數的最高32位,陣列結尾是大數最低32位。其與BigInteger的轉換方法 /// <summary> /// <see cref="uint"/>陣列轉為非負大整數 /// <
【筆記】大數乘法之古典演算法 (Java BigInteger原始碼)
BigInteger與uint[] 用uint[]來表示非負大數,其中陣列開頭是大數的最高32位,陣列結尾是大數最低32位。其與BigInteger的轉換方法 /// <summary> /// <see cref="uint"/>陣列轉為非負大整數 /// <
【java學習筆記】JAVA自學之路 JAVA自學之路 ___轉知乎
一:J2SE 面向物件-封裝、繼承、多型 記憶體的分析 遞迴 集合類、泛型、自動打包與解包、Annotation IO 多執行緒、執行緒同步 TCP/UDP AWT、事件模型、匿名類 正則表示式 反射機制 二:資料庫(Oracle或者MySQL) SQL語句 多表連線,內外連線
【Java學習筆記】<集合框架>對字串進行長度排序
1 import java.util.Iterator; 2 import java.util.TreeSet; 3 4 public class TreeSetTest { 5 6 public static void main(String[] args) { 7
【JVM讀書筆記】- Java記憶體區域
Java虛擬機器在執行Java程式的過程中會把它所管理的記憶體分為若干個區域。 1. 程式計數器 作用:通過改變這個計數器的值來選取下一條需要執行的指令。 如果正在執行的是Java方法,那麼計數器記錄的是正在執行的虛擬機器位元組碼指令地址;如果正在執
【讀書筆記】——《代碼大全》(六)
variable 數據 borde 代碼 In 自然 dex ont 列表 The Power of Variable Names 摘錄與總結一些有用的東西。 語義前綴 語義前綴 含義 c 數量(count,如記錄、字符或者其他東西的個數)
【java學習筆記】單例模式
單例設計模式:某個類在整個系統中只能有一個例項物件可被獲取和使用的程式碼模式。例如:代表JVM執行環境的Runtime類 要點: 一.一個類只能有一個例項:構造器私有化 二.該類必須自己建立這個例項:含有一個該類的靜態變數來儲存這個唯一例項 三.該類必須向整個系統提供這個例項:方式:1.直接暴露2.用
【java學習筆記】模擬鬥地主功能
模擬鬥地主的功能:1.組合牌 2.洗牌 3.發牌 4.看牌,目的是溫習回顧一下java集合框架的應用。 import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; public class Po
【java學習筆記】MyBatis中當實體類中的屬性名和表中的欄位名不一樣時的解決方法
在使用MyBatis開發DAO層時,當實體類中的屬性名和表中的欄位名不一樣時,查詢出來的值為null,此時有3種解決方法 解決方法1 在Mapper.xml對映檔案中,寫SQL語句時起別名 解決
【java學習筆記】淺析JavaWeb開發中Model1模式和Model2模式
Model1模式 JavaBean就是java類,JavaBean分兩類:一類是實體Bean,一類是業務Bean model1模式優點:執行效率高,開發效率比較高,適合小型專案 model1模式缺點:邏輯比較混亂,頁面混亂,維護困難,擴充套件不容易 Model2模式
【java學習筆記】踩坑記錄,異常:javax.el.PropertyNotFoundException: Property [XXX] not found on type [XXX.XXX.XXX.XXX]
練習JavaWeb專案時,報錯javax.el.PropertyNotFoundException,原因是EL表示式裡面的屬性和pojo裡面的屬性名字沒有對上,範了個低階錯誤。 jsp中: <li>歡迎您,${loginUser.username}!</li> pojo
【Java學習筆記】吸血鬼數
吸血鬼數字,是指數位為偶數的數字,可以由一對數字相乘而得到,而這對數字各包含 乘積的一半位數的數字,其中從最初的數字中選取的數字可以任意排序。 以兩個0結尾的數字是不允許的,例如,下列數字都是'吸血鬼'數字 1260 = 21 * 60 1827 = 21 * 87 2187 = 27 * 81
【機器學習筆記】線性迴歸之最小二乘法
線性迴歸 線性迴歸(Linear Regreesion)就是對一些點組成的樣本進行線性擬合,得到一個最佳的擬合直線。 最小二乘法 線性迴歸的一種常用方法是最小二乘法,它通過最小化誤差的平方和尋找資料的最佳函式匹配。 代數推導 假設擬合函式為 y
【android學習筆記】ormlite學習之模糊搜尋like
【目標】實現表中多個欄位模糊搜尋。 【方法】ormlite like 方法 :like(columnName,pattern) 使用%萬用字元來匹配,指定行資料,返回匹配到的結果 使用示範:mDao.queryBuilder().where().like("Last
【Java學習筆記】程式碼塊執行順序 2-8程式設計練習
Android零基礎入門——慕課就業班 Java面向物件——Java封裝 2-8程式設計練習 題目: 請根據效果圖以及任務要求完成程式碼。 程式參考執行效果圖如下: 任務要求: 建立類Code,類中編寫構造塊、靜態程式碼塊以及構造方法 建立C
【Java學習筆記】Java封裝 3-8程式設計練習
Android零基礎入門——慕課就業班 Java面向物件——Java封裝 2-8程式設計練習 3-8 作業 題目要求: 某公司要開發內部的 “辦公資訊化管理系統”,請使用面向物件的思想描述以下員工資訊。 程式執行參考效果圖如下: 任