1. 程式人生 > >泛型 佇列 棧

泛型 佇列 棧

泛型在集合中的應用
泛型是在javaSe5.0後引入的特性,泛型的本質是引數化型別,在類,介面和方法的定義中,所操作的
資料型別被傳入的引數指定

Java泛型機制廣泛的應用在集合框架中,所有的集合型別都帶有泛型引數,這樣在建立集合時可以指定
放入集合中元素的型別,Java編譯器可以根據此進行型別檢查,這樣可以減少程式碼在執行時出現錯誤
的可能性

ArrayList類的定義中,<E>中的E為泛型引數,在建立物件時可以將型別作為引數傳遞,此時類定義所有
的E將被替代成傳入的引數

List<String> list = new ArrayList<String>();
list.add<"one">;
list.add<100>;java編譯器型別檢查錯誤,此時add方法應該傳入的引數為String

集合操作--線性表
List介面是Collection的子介面,用於定義線性表資料結構,可以將List理解為存放物件的陣列,
只不過其元素個數可以動態的增加或減少

- List介面的兩個常見實現類:ArrayList和LinkedList,分別用動態陣列和連結串列的形式實現了List介面

- get和set
List除了繼承Collection定義的方法外,還根據其線性表的資料結構定義了一系列的方法,其中最常
用的就是基於下標的get和set方法

- E get(int index)
獲取集合中指定下標對應的元素,下標從0開始

- E set(int index,E element)
將給定的元素存入給定位置,並將原位置的元素返回

插入和刪除
- List根據下標的操作還支援插入和刪除操作
- void add(int index,E element)
將給定的元素插入到指定位置,原位置及後續元素都順序向後移動

- E remove(int index)
- 刪除給定位置的元素,並將被刪除的元素返回

- subString()
- List和陣列之間的相互轉換
- 陣列的排序
- comparable介面以及comparator介面

佇列和棧
.佇列(Queue)是常用的資料結構,可以將佇列看特殊的線性表,佇列限制了對線性表的訪問方式:
只能從線性表的一段新增(offer)元素,從另一端取出(poll)元素
佇列所遵循的原則:先進先出(FTFO First input First Output)

JDK提供了Queue的介面,同時使得LinkedList實現了該介面(選擇LinkedList的原因在於Queue經常
需要進行新增和刪除操作,而LinkedList在這方面效率較高)

--Queue介面中的主要方法如下:
Boolean offer(E e):將一個物件新增至隊尾,如果新增成功則返回true,否則false.

E poll();從隊首刪除並返回一個元素

E peek();返回隊首元素(但並不刪除)

棧:先進後出

Deque 先進後出
.Deque是Queue的子介面,定義了所謂"雙端佇列"即從佇列的兩端分別可以入隊和出隊,LinkedList也
實現了這個介面

如果將Deque限制為只能從一段入隊和出隊,則可實現"棧"stack的資料結構,對於棧而言,
入棧稱之為push,出棧稱之為pop

棧遵循先進後出的原則

查詢表
Map()介面
.Map介面定義的集合(查詢包),用於儲存所謂的"key-value"對映對,key可以看成是value的索引,
作為key的物件在集合中不可以重複

.根據內部資料結構的不同,Map介面的實現類很多,其中常用的有內部為hash表實現的HashMap和內部
為排序二叉樹實現的TreeMap

put()方法:
.Map介面定義了向Map中存放元素的put方法:
-V put(K key,V value);
.將Key-Value對存入Map,如果在集合中已經包含該Key則操作將替換掉Key所對應的value值,返回該
key原來所對應的值Value.(如果沒有則返回null)

get()方法:
.Map介面中定義了從Map中獲取元素的get方法
-V get(Object key)
.返回引數Key所對應的Value物件,如果不存在則返回null(這裡指的是key不存在則返回null)

containKey()方法
.Map介面中定義了判斷某個Key是否在Map中存放.
--boolean containsKey(Object key)
若Map中包含給定的key則返回true,否則返回false.
如何建立:
Map<String,Integer> map = new HashMap<String,Integer>();

有序Map
LinkedHashMap實現有序的map
.使用Map介面的雜湊表和連結串列實現,具有可預知的迭代順序,此實現與HashMap的不同之處在於
-LinkedHashMap維護者一個雙向迴圈連結串列,此連結串列定義了迭代順序
該迭代順序通常就是存放元素的順序

遍歷map
使用KeySet()方法
.Map提供了三種遍歷方式
-遍歷所有的Key
-遍歷所有的key-value對
-遍歷所有的value(不常用)

.遍歷所有key的方法
-Set<K> KeySet();
-該方法會將當前Map中所有的key存入到Set集合中返回

.使用entryset()方法:
Set<Entry<K,V>> entrySet();
-該方法會將當前Map中每一組key-value對封裝為一個Entry物件並存入Set集合後返回

檔案操作:
File物件
1.java.io.File用於表示檔案(目錄),也就是說程式設計師可以通過File類在程式中操作硬碟上的
目錄和檔案
2.File類只能用於表示檔案(目錄)的資訊(名稱,大小等),不能對檔案的內容進行訪問
3.構造方法
-File(String path/name)
-通過將給定路徑名字字元字串轉換成抽象路徑名來建立一個系的File例項
-抽象路徑名應儘量使用相對路徑,並且目錄的層級分離符不要直接寫"/"或"\"
應該使用File.separator這個常量表示,以避免不同系統帶來的差異

File(File parent,String child)
.File還提供了另一個構造方法
-根據parent抽象路徑名和child路徑名字字串建立一個新File例項

ifFile()方法
.File的isFile()方法用於判斷當前File物件所表示的是否為一個檔案
-boolean isFile()
-返回值:當前File物件所表示是一個檔案時返回true

length()方法
File的length方法用於返回此抽象路徑名錶示的檔案的長度(佔用位元組量)
-long length();
-返回值:當前File物件所表示的檔案所佔用的位元組量

exist()方法
File的exist()方法用於測試此抽象路徑名錶示的檔案或目錄是否存在
-boolean exist();
-返回值:若該File表示的檔案或目錄存在則返回true,否則返回false

createNewFile()方法
File的createNewFile方法用於當且僅當不存在具有此抽象路徑名指定的名稱的檔案時,
原子地建立由此抽象路徑名指定的一個新的空檔案
-boolean createNewFile
-返回值:如果指定的檔案不存在併成功的建立,則返回true;如果指定的檔案已經存在,則返回false