1. 程式人生 > >java集合框架容器 java框架層級 繼承圖結構 集合框架的抽象類 集合框架主要實現類

java集合框架容器 java框架層級 繼承圖結構 集合框架的抽象類 集合框架主要實現類

本文關鍵詞:

java集合框架  框架設計理念  容器 繼承層級結構 繼承圖 集合框架中的抽象類  主要的實現類 實現類特性   集合框架分類 集合框架併發包 併發實現類

什麼是容器?

由一個或多個確定的元素所構成的整體叫做集合。

容器用來包裝或裝載物品的貯存器   (如箱、罐、壇)或者成形或柔軟不成形的包覆材料。

在Java中的Collection框架,有的人叫做集合有的叫做容器,不管怎麼叫基本上也離不開"把元素裝起來"這個本質.

我們的世界裡面豐富多彩,有各種各樣的事物,很多事物都會有他的容器

人的生活自然也離不開各種容器,喝水需要杯子,吃飯需要碗,煮湯需要鍋,這都是容器;

容器有各種各樣的形狀,也有各種各樣的特性;

比如茶杯有的有蓋子,有的沒有蓋子,水壺可以從壺嘴往外倒水等

java是面向物件的語言,萬事萬物皆是物件,縱然有著千姿百態的各種不同型別

所以想要在java物件中更加暢快的使用物件,自然也是需要容器的;

為什麼要有容器?

按照容器的概念,陣列也是一種容器,可以用於存放一個或者多個元素;

可是,陣列只能儲存同一種類型的元素,而且長度是固定的;

人們自然希望可以有一種容器能夠儲存各種不同的型別的元素,並且長度是不固定的;

這也是集合框架設計的初衷;

提供一種可以儲存多種型別元素,並且長度不受限制的容器,來更加方便的儲存物件;

所以java中的容器也就是java世界裡面承裝物件的器皿.

JAVA集合框架本質

容器根本屬性在於存/取,以及一些其他的附加的操作.

容器內部有其擺放形式:排成一行還是扔到一堆?

也有他的存取順序:先進先出還是先進後出的被壓倒最下面?

這是抽象的描述

對應到電腦科學的世界裡面,那即是資料結構與演算法的描述

資料結構是指相互之間存在著一種或多種關係的資料元素的集合和該集合中資料元素之間的關係組成

資料結構中有線性結構,樹形結構等,形式有佇列  棧 鍵值對 等

至此,可以這麼理解程式語言中的集合框架:

集合框架目的就只是為了盛裝物件,操作物件

本質就是Java語言,針對於容器這一概念,資料結構與演算法的描述實現.

更直白的說,也就只是資料結構與演算法,java只是一個表現形式

比如LinkedList 他就是java語言對於雙向連結串列的一種描述,如果你懂雙向連結串列的原理,並且懂得java的語法,你也可以實現一個LinkedList

不過,選取哪些資料結構,使用哪些演算法,繼承層級如何安排,這是java自己的特點;

集合框架的層級結構

當然,並不是說你用Java編寫一個雙向連結串列就是寫出來集合框架了Java是面向物件的語言,面向物件的三大基礎特徵,封裝繼承多型嘛想要給一門程式語言提供一個集合框架,自然不是寫幾個演算法資料結構這麼簡單的事情Java中的集合框架是自頂而下設計的如同所有的物件的祖宗都是Object一樣集合框架自然也是有祖宗的,那就是Collection 這就表示集合 ,在Java中用來儲存元素的容器不過也還有另外一派,叫做Map ,如官方文件中描述的那樣,Map並不算是集合,只不過是一種操作資料的結構而已但是Map也提供了類似集合似的存取元素,元素操作等功能廣義上按照我們之前說的集合/容器的概念去理解的話,自然他也可以算得上是Java集合的一份子所以一般都是把Map和Collection統稱為Java的集合體系的鑑於Java語言的特性,集合體系中這些用於刻畫家族臉譜的東西,自然都是介面,除非特別指明,所提到的型別均為介面Collection中是一組獨立的元素而Map中則是一組成對的鍵值對元素一組獨立的元素,Collection,中又可以按照有序的列表和無序的集,這就是List 和Set當然還有Queue,佇列其實話說回來,為何Queue直接繼承自Collection?有序和無序的並集不就已經是整體了麼佇列不也算是一種特殊的List麼,的確佇列是一種特殊的List,而且,常用的實現類LinkedList

.....implements List<E>, Deque<E>..... 並且其中 interface Deque<E> extends Queue<E> 
所以說,佇列邏輯思維意義上就是列表中比較特殊的一種,只不過他的特殊性比較多
所以在實現程式碼的時候把它單獨拿出來直接繼承自Collection 作為一種大的分類
也我覺得也並沒有什麼太大的違和感,個人理解,歡迎指正
現在我們已經"高屋建瓴"的把集合Collection分為了 List  Set Queue這三種,再加上剛才說到的Map
  1. 列表(List):List集合區分元素的順序,允許包含相同的元素,訪問集合中的元素可以根據元素的索引來訪問。
  2. 集(Set):Set集合不區分元素的順序,不允許包含相同的元素,訪問集合中的元素只能根據元素本身來訪問(也是集合裡元素不允許重複的原因)。
  3. 對映(Map):Map集合儲存的”鍵”-“值”對,“鍵”不能重複,而且一個“鍵”只能對應一個“值”,訪問時只能根據每項元素的key來訪問其value。
  4. 佇列(Queue) 沒什麼好理解的,就是類似隊伍的概念,詳細的以後再說

四大天王已經誕生了

Set和Map本身是無序的,在此基礎上又增加了排序的概念

所以家族裡面又多出來sortedSet 和   sortedMap

既然有了排序的概念,那麼在此之上繼續增加個可搜尋的功能也沒什麼好奇怪的

也就是

NavigableSet 和  NavigableMap 

不得不說,美國人英語真好

Queue佇列中又分為:

雙端佇列Deque    (double ended queue)

所以主要的介面是這些:

Collection

|---List

|---Set

   |---sortedSet

   |---NavigableSet

|---Queue

   |---Deque

|---Map

          |---sortedMap

      |---NavigableMap

至此,對於java集合來說,意識形態層面的設計已經完成.

集合框架的抽象類

一人心難如萬人意,集合框架設計者也明白這個道理

自然知道提供的實現類並不能滿足所有人需求,自然有人想要自己實現,

如果從頭寫來一個自然是代價巨大,考慮到這點,集合框架提供了不少的抽象類,抽象類實現了大部分通用的方法

你想要實現,只需要繼承抽象類,並且實現必要的幾個方法即可

當然,集合的設計本身也是這個思路,一舉兩得,自己寫的這麼方便的東西,沒道理不用;

抽象類大多數以Abs開頭的

AbstractCollection:

提供了Collection的主要實現

  1. 為了實現一個不可修改的集合,程式設計師只需要擴充套件這個類併為iteratorsize 方法提供實現。(iterator方法返回的迭代器必須實現hasNext和next。)
  2. 為了實現一個可修改的集合,程式設計師必須另外重寫這個類的add方法(否則丟擲一個UnsupportedOperationException),迭代器方法返回的迭代器必須另外實現它的remove方法。

Collection 下的大多數子類都繼承 AbstractCollection ,比如 List 的實現類, Set的實現類。

AbstractList

List介面的骨架實現,最大限度地減少實現由“隨機訪問”資料儲存(如陣列)所支援的介面所需的工作量。

對於順序訪問資料(如連結列表),應該優先使用AbstractSequentialList。

AbstractSequentialList

List介面的骨架實現,以最大限度地減少實現由“順序訪問”資料儲存(如連結列表)支援的介面所需的工作量。

對於隨機訪問資料(如陣列),應優先使用AbstractList。

AbstractSet

提供了Set介面的骨架實現,不會覆蓋AbstractCollection類中的任何實現。它只是增加了equals和hashCode的實現。

通過擴充套件此類來實現集合的過程與通過擴充套件AbstractCollection來實現集合的過程相同

不同之處在於此類的所有子類中的所有方法和建構函式都必須遵守Set介面施加的額外約束(例如,新增方法不得允許將一個物件的多個例項新增到一個集合中)。

AbstractQueue

相關推薦

java集合框架容器 java框架層級 繼承結構 集合框架抽象 集合框架主要實現

本文關鍵詞: java集合框架  框架設計理念  容器 繼承層級結構 繼承圖 集合框架中的抽象類  主要的實現類 實現類特性   集合框架分類 集合框架併發包 併發實現類 什麼是容器? 由一個或多個確定的元素所構成的整體叫做集合。 容器用來包裝或裝載物品的貯存器   (如箱、罐、壇)或者成形或柔軟

Java面向物件筆記(封裝、繼承、多型、抽象、介面)

面向物件的思想在現實生活中很常見,例如專案開發,老闆想要實現某個功能,但是他自己不會這些技術,所以他就會讓員工去做這些事情,通過藉助別的擁有你想要實現某些功能的過程就可以理解為面向物件。 面向物件有三大特性:封裝、繼承、多型。 1.封裝:即是把函式或者工具類的實

Java集合是Iterable的實現的原因

介紹 Iterator和Iterable都是介面。 好多集合類,比如List一族或者Set一族,都實現了Iterable介面,這樣物件就可以呼叫iterator()方法。

Scala集合特質繼承體系、定義方法與主要實現詳解

目錄 一. 架構 二. Traversable 三. Iterable 1. Seq 1.1 緩衝器 2. Set 2.1 SortedSet 2.2 Bitset 3. Map 3.1 ListMap 四. 不可變Seq實體類 1. Lis

細說JAVA中Collection介面和Map介面的主要實現

特此宣告:這是博主很久很久以前儲存在本地的文章,當時沒有記錄出處,因為找不到出處了,現註明是轉載!!!! Collection介面 Collection是最基本的集合介面,一個Collection代表一組Object,即Collection的元素(Elements)。一些Collection允許相同的元素而

小型Java Web專案之DAO操作標準、DAO介面真實實現、DAO代理實現、DAO工廠

DAO模式的好處是資料訪問和業務邏輯分離,便於資料維護,業務邏輯不需要了解訪問細節。 DAO的組成: 1.DatabaseConnection:負責開啟和關閉資料庫; 2.VO:包含屬性以及其getter和setter方法; 3.DAO:定義操作的介面,

關於使用spring框架的時候抽象中注入其他實現失敗的解決方法

/** * 抽象基類,為所有子類提供一個 流程操作演算法框架。 * @author */ @Transactional public abstract class RefreshBeverage { @Resource private TaskFollowMapper taskFo

介面(interface),實現(class),繼承(extends),實現(implements)

介面類: @Service public interface AppCertMsgService { public Map<String, Object> saveCardMsg(AppCertMsg appCertMsg, String channe

JAVA基礎第四章-集合框架Collection篇 JAVA基礎第一章-初識java JAVA基礎第二章-java三大特性:封裝、繼承、多型 JAVA基礎第三章-與物件、抽象、介面 記一次list迴圈刪除元素的突發事件!

 業內經常說的一句話是不要重複造輪子,但是有時候,只有自己造一個輪子了,才會深刻明白什麼樣的輪子適合山路,什麼樣的輪子適合平地! 我將會持續更新java基礎知識,歡迎關注。   往期章節: JAVA基礎第一章-初識java JAVA基礎第二章-java三大特性

JAVA基礎第五章-集合框架Map篇 JAVA基礎第一章-初識java JAVA基礎第二章-java三大特性:封裝、繼承、多型 JAVA基礎第三章-與物件、抽象、介面 JAVA基礎第四章-集合框架Collection篇

 業內經常說的一句話是不要重複造輪子,但是有時候,只有自己造一個輪子了,才會深刻明白什麼樣的輪子適合山路,什麼樣的輪子適合平地! 我將會持續更新java基礎知識,歡迎關注。   往期章節: JAVA基礎第一章-初識java

第六章 Java並發容器框架

保護 在操作 shc 包含 ransient michael java ron 出隊 ConcurrentHashMap的實現原理與使用 ConcurrentHashMap是線程安全且高效的hashmap。本節讓我們一起研究一下該容器是如何在保證線程安全的同時又能保證高效的

Java基礎知識(JAVA集合框架之List與Set)

開發 如果 表數 特點 必須 加鎖 以及 stringbu 不可 List和Set概述數組必須存放同一種元素。StringBuffer必須轉換成字符串才能使用,如果想拿出單獨的一個元素幾乎不可能。數據有很多使用對象存,對象有很多,使用集合存。 集合容器因為內部

集合框架ArrayList+JAVA學習筆記-DAY16

15.01_集合框架(物件陣列的概述和使用) A:案例演示 需求:我有5個學生,請把這個5個學生的資訊儲存到陣列中,並遍歷陣列,獲取得到每一個學生資訊。 Student[] arr = new Student[5];

Java 知識點整理-9.Java集合框架 集合概述+Collection介面+Iterator介面+迭代器+List介面+併發修改異常+ListIterator介面+Vector+List子

本章會用大量程式碼做具體演示。統一說明:返回型別E在JDK1.5之前是Object,1.5之後等泛型再講。 先介紹一個偶然發現的快捷鍵和一個很實用的快捷鍵: Alt + Shift + N 快速呼叫建立選單。直接按開頭的首字母進行建立即可,某些時候感覺比Ctrl + N更快捷。

Java 知識點整理-12.Java集合框架 Map+HashMap+LinkedHashMap+TreeMap+Collections+泛型固定下邊界+集合框架總結

目錄 Map集合概述和特點 HashMap LinkedHashMap TreeMap HashMap Collections類 泛型固定下邊界 集合框架總結 Map集合概述和特點 1、Map介面概述: public interface Map

Java 知識點整理-11.Java集合框架 Set+HashSet+LinkedHashSet+TreeSet+List和Set迭代方式的區別

目錄 Set HashSet LinkedHashSet TreeSet List和Set迭代方式的區別: Set 1、Set集合概述及特點: public interface Set<E> extends Collection<E>

Java 知識點整理-10.Java集合框架 去除ArrayList中重複字串、自定義物件 棧和佇列 泛型 JDK5新特性 asList() toArray(T[] a) ArrayList迴圈巢狀

詳細標題:去除ArrayList中重複字串、自定義物件元素方式 棧和佇列 泛型 JDK5新特性(增強for迴圈 三種迭代(普通for、迭代器、增強for)中的元素能否刪除 靜態匯入 可變引數)Arrays工具類的asList() Collection中toArray(T[] a) 集合巢狀之Arra

Java框架(四):集合輸出

集合輸出的4種形式:Iterator輸出、ListIterator輸出、foreach(加強型for迴圈)輸出、Enumeration輸出。 迭代輸出:Iterator Iterator(迭代器)是集合輸出操作的一個介面,Collection介面中提供了直接為Iterator介面例項

java.util.Collection包 java集合框架總結

java.util.Collection java.util.Collection(以下簡稱Collection)的子介面有List Set Queue,他們各自都有一個抽象實現類AbstractCollection、AbstractList、Abstrac

Java基礎(五十九)-集合工具Java框架

1:Stack棧 棧是一種先進後出的資料結構。例如:在文字編輯器上都有撤銷功能,那麼每次使用的時候,最後一次的編輯操作永遠是最先撤銷的,那麼這個功能就是利用棧來實現的,棧的基本操作形式如下。 案例:實現棧的操作 import java.util.Stack;