Java集合--集合擴展

內容學習於: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只是彌補了傳統類集設計裏面的一些功能的缺失,但是考慮到實際應用的場景下,這些缺失的功能未必都會經常性的使用到。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章