Java集合類框架的基本介面有哪些
一.為什麼要使用介面
假如有一個需求:要求實現防盜門的功能。門有”開”和”關”的功能,鎖有”上鎖”和”開鎖”的功能。
分析:首先防盜門是一個門,門有開門和關門的功能,還有一把鎖,鎖有開鎖和上鎖,按照面向物件的程式設計的思想,我們會將門和鎖都作為一個類而單獨存在,但是,不能讓防盜門繼承自門的同時又繼承自鎖,防盜門不是鎖,不符合繼承中is a的關係,在java中支援單繼承。那麼我們如何來解決這一問題,這時就要用到介面。
二.什麼是介面
在軟體中介面是一種規範和標準,他們可以約束類的行為,是一些方法特徵的集合,但是沒有方法的實現,介面其實上也可以看做是一個特殊的抽象類,但是採用和抽象類完全不同的方法來表示,兩者的設計理念也是不同的,抽象類有利於程式碼複用,介面利於程式碼的擴充套件和維護。
三.抽象類和介面的區別:
01抽象類可以提供成員方法的實現細節,而介面中只能存在public abstract 方法;
02.抽象類中的成員變數可以是各種型別的,而介面中的成員變數只能是public static final型別的;
03.介面中不能含有靜態程式碼塊以及靜態方法,而抽象類可以有靜態程式碼塊和靜態方法;
04.一個類只能繼承一個抽象類,而一個類卻可以實現多個介面。
四.如何定義介面
首先先來看一下語法:
[修飾符] interface 介面名 extends 父介面1,父介面2,…
{
//常量定義
//方法定義
}
在一個類中實現介面語法:
class 類名 父類名 implements 介面1,介面2,…..
{
//類成員
}
五.定義介面注意點
01.介面的命名規則與類相同,如果修飾符是public ,則該介面在整個專案中可見;如果省略修飾符,則該介面只在當前包中可見。
02.介面中可以定義常量,不能定義變數,如果你在介面中定義屬性,那麼通過反編譯可以看見他會自動用public static final 修飾,介面中的屬性都是全域性靜態常量,介面中的常量必須在定義時指定初始值。
03.介面中所有的方法都是抽象方法,介面中方法都會自動用public abstract 修飾,即介面中只有全域性抽象方法。
04.介面不能例項化,介面中不能有構造。
05介面之間可以通過extends實現繼承關係,一個介面可以繼承多個介面,但介面不能繼承類。
06.介面的實現類必須實現介面的全部方法,否則必須定義為抽象類。
總共有兩大介面:Collection 和Map ,一個元素集合,一個是鍵值對集合; 其中List和Set介面繼承了Collection介面,一個是有序元素集合,一個是無序元素集合; 而ArrayList和 LinkedList 實現了List介面,HashSet實現了Set介面,這幾個都比較常用; HashMap 和HashTable實現了Map介面,並且HashTable是執行緒安全的,但是HashMap效能更好;
java.util.Collection [I]
|—java.util.List [I]
|—java.util.ArrayList [C]
|—java.util.LinkedList [C]
|—java.util.Vector [C]
|—java.util.Stack [C]
|—java.util.Set [I]
|—java.util.HashSet [C]
|—java.util.SortedSet [I]
|—java.util.TreeSet [C]
java.util.Map [I]
|—java.util.SortedMap [I]
|—java.util.TreeMap [C]
|—java.util.Hashtable [C]
|—java.util.HashMap [C]
|—java.util.LinkedHashMap [C]
|—java.util.WeakHashMap [C]
Java集合類裡最基本的介面有:
Collection:單列集合的根介面
List:元素有序 可重複
ArrayList:類似一個長度可變的陣列 。適合查詢,不適合增刪
LinkedList:底層是雙向迴圈連結串列。適合增刪,不適合查詢。
Set:元素無序,不可重複
HashSet:根據物件的雜湊值確定元素在集合中的位置
TreeSet: 以二叉樹的方式儲存元素,實現了對集合中的元素排序
Map:雙列集合的根介面,用於儲存具有鍵(key)、值(value)對映關係的元素。
HashMap:用於儲存鍵值對映關係,不能出現重複的鍵key
TreeMap:用來儲存鍵值對映關係,不能出現重複的鍵key,所有的鍵按照二叉樹的方式排列