內容學習於:edu.aliyun.com
1. Stack棧
在瀏覽器上存在有“後退”按鈕,在Android手機上存在有一個“返回”,在開發工具上存在有“撤銷"功能,會發現所有的操作都是最晚操作的功能永遠都是最先恢復,而越早的操作越晚恢復,實際上這就屬於一種棧的結構。
- public class Stack extends Vector
Stack類是Vector 的子類,但是需要記住的是,Vector 類的內部是利用數組的形式實現的,而Stack的操作不能夠使用Vector類中定義的方法,而應該使用本類自己擴充的方法。
- 入棧:public E push(E item)
- 出棧:public E pop()
- 判斷棧是否爲空:public boolean empty()
需要記住的是,如果要想通過棧彈出所需要的數據,那麼必須保證棧中的內容不爲空,如果爲空則會產生如下異常:
- Exception in thread “main” java.util.EmptyStackException
而後觀察Stack中的源代碼可以發現,在進行棧數據壓入、彈出等操作的時候全部都有同步的操作支持,即:棧的默認實現都需要考慮到多線程的同步處理。
2. Properties屬性操作
java.util.Properties是一個屬性的操作類,實際上這個類的名字和之前講解過的“*.properties"是相同的,Properties 類主要的功能是進行屬性定義(屬性的類型全部都是String), 同時也可以方便的通過輸入流讀取和寫入輸出流(“*.properties" 文件可以理解爲一種文件的輸入流和輸出流),Properties 是Hashtable的子類,觀察類的定義:
- public class Properties extends Hashtable<Object,Object>
在Properties繼承Hashtable類的時候,所設置的泛型類型都是Object,因爲Properties不需要考慮所設置的泛型,它所有的數據類型必須是字符串(String), Propertis 類中提供的常用方法有如下幾個:
No. | 方法名稱 | 類型 | 描述 |
---|---|---|---|
01 | public Properties() | 構造 | 創建properties實例,默認長度爲8 |
02 | public Object setProperty(String key, String value) | 方法 | 設置屬性內容 |
03 | public String getProperty(String key) | 方法 | 獲取屬性內容,如果不存在返回null |
04 | public String getProperty(String key, String defaultValue) | 方法 | 獲取屬性內容,如果不存在返回默認值 |
05 | public void list(PrintStream out) | 方法 | 列出全部屬性 |
06 | public void list(PrintWriter out) | 方法 | 列出全部屬性 |
07 | public void store(OutputStream out, String comments) throws IOException | 方法 | 向輸出流輸出全部內容 |
08 | public void load(InputStream inStream) throws IOException | 方法 | 向輸入流讀取數據 |
通過以上的方法可以發現,使用Properties實際上可以從任意的位置上進行屬性內容的讀取和輸出。
Properties簡單操作:
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
Properties pro = new Properties();
pro.setProperty("ZZ","鄭州");
System.out.println("【查詢的數據存在】" + pro.getProperty("ZZ"));
System.out.println("【查詢的數據不存在】" + pro.getProperty("bj"));
System.out.println("【查詢的數據不存在,有默認數據】" + pro.getProperty("bj","查詢的數據不存在!!"));
}
}
結果:
【查詢的數據存在】鄭州
【查詢的數據不存在】null
【查詢的數據不存在,有默認數據】查詢的數據不存在!!
如果有需要(一定有此需要)可以利用輸出和輸入流進行屬性內容的保存和加載。
文件的保存和加載:
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
Properties pro = new Properties();
pro.setProperty("zz", "鄭州");
pro.setProperty("bj", "北京");
pro.setProperty("wh", "武漢");
//保存properties文件
pro.store(new FileOutputStream(
new File("d:" + File.separator + "area.properties")),
"Area Info");
//加載資源文件
pro.load(new FileInputStream(
new File("d:" + File.separator + "area.properties")));
System.out.println(pro.getProperty("zz"));
}
}
結果:
鄭州
比較:關於Properties與ResourceBundle區別?
- Properties實現的是一個屬性操作,那麼保存屬性資源的可以是任意的文件後綴,並且在進行加載的時候,如果指定屬性的key不存在,那麼返回的是null;
- ResourceBundle主要加載的是“*.properties’資源文件,如果現在要查詢的key不存在,則會產生異常,但是特別需要注意的是,ResourceBundle 可以與Local結合實現不同語言資源文件的加載。
在之前講解JavaIO編程的時候寫過一個代碼:
- System. getProperties(). list (System.out) ;
實際上System類中的getPropertes(方法返回的就是一個Properties類的實例化對象,而list()方法裏面只需要接收一個PrintStream或者是PrintWriter就可以實現指定位置的輸出。
3. Collections工具類
java.uilCollctions提供的是一個類集操作的工具類,它可以彌補原始類集設計之中的一些缺陷,提供更加豐富的操作方法。
類結構如下圖所示:
Collections操作:
public class JavaAPIDemo {
public static void main(String[] args) throws Exception {
List<String> all = new ArrayList<>();
Collections.addAll(all,"Hello","MLDN","Everyone");
Collections.sort(all);//排序
System.out.println(Collections.binarySearch(all,"MLDN"));//二分查找
}
}
結果:
2
Java之中的Collections只是彌補了傳統類集設計裏面的一些功能的缺失,但是考慮到實際應用的場景下,這些缺失的功能未必都會經常性的使用到。