1. 程式人生 > >Java集合框架1

Java集合框架1

排序 equals array 設置 str 文件中 操作 同步 trees

Java SE包含了由一組類和接口組成的Java集合框架,用來將儲存的數據以某種結構組織,並以特定的方式來訪問這些數據,其目的就是提供一個處理對象集合的通用框架。

Java集合框架將對象儲存的方式分為三種類型,分別是:

    Set(集):對象容器中的對象沒有順序,且不能重復。

    List(列表):對象容器中的對象按照索引順序排序,可以有重復的對象。

    Map(映射):對象容器中的元素包含一對“鍵對象-值對象”映射,其中鍵對象不能重復,值對象可以重復。

為支持對象的排序和遍歷,提供以下幾個接口:

    接口SortedSet為Set類型容器提供排序功能。

    接口SortedMap是為Map類型容器提供鍵對象的排序。

    接口Iterator提供了對集合對象進行遍歷訪問的遍歷器。

    接口Comparable和Comparator用來實現集合中對象的排序。

集合Collection接口位於Set接口和List接口的最頂層,是Set接口和List接口的父接口。Collection接口定義了基本操作(增刪...)、批量操作、數組操作的基本方法。

在Collection接口中有一個iterator()方法可以返回一個Iterator對象,來遍歷集合中的所有元素。

Iterator接口的方法:

          1.hasNext():如果集合中還有更多的元素,該方法返回true。

          2.next():返回集合中的下一個元素。

          3.remove():刪除iterator返回的最後一個元素。

每個集合都提供專用的機制訪問各自的數據,但它們都支持iterator方法,故我們可以通過統一的機制來應用於所有結合類的遍歷。

此外,JDK1.5後又提供了foreach循環語句,可以用更簡單的方法遍歷集合和數組。

在實際開發中我們常常是用Collection接口的子接口:List和Set

List接口

  1.List中的元素是有順序的。

  2.List通常允許元素重復。

  3.支持null元素

  4.可以通過索引訪問List對象中的元素

1) ArrayList(在底層使用數組作為容器,不同的是可以增刪查改)

  常用方法:add()、addAll、get()、set()、remove()  

  Vector與Arraylist類似,區別是Vector線程安全,速度較慢。

泛型:

    允許在定義類、接口的時候指定類型形式參數,強迫程序在編譯期檢查從集合中取得的數據的類型。

equals()方法:

    定位一個對象是通過equals方法比較來進行定位的。

2)LinkedList

    LinkedList是實現了雙向鏈表功能的列表,列表中每個元素均放在獨立的空間中,並且每一個空間都保存有上一個和下一個鏈表的索引。

    在需要對元素中間部分進行大量的增刪查改時,可以選擇使用LinkedList。

Set接口

    繼承了Collection接口的全部方法,並且有如下特征:

        1.元素不能重復(必須重寫equals()方法&hashcode()方法)

        2.元素可能有順序,也可能沒有。

        3.不能用索引來直接訪問Set中的元素。

    Set最常用的類是HashSet和TreeSet

        1.HashSet

        基於哈希算法的Set接口實現,有以下特點:

            1.遍歷HashSet時,元素無順序。

            2.不允許出現重復的元素。(具有相同的哈希碼且用equals()方法比較返回true的兩個對象)

            3.允許包含null元素

        2.TreeSet

        在實現Set接口的同時實現了SortedSet接口,保證對象按照一定的順序排序。這種順序不是按照對象添加的順序而是按照一定的算法來排序。

        也可以根據提供的Comparator進行排序。

        在JDK類庫中有一部分類實現了Comparable接口,例如Integer、Double、String等到,該接口有一個compareTo(object o)方法,返回整型數據,返回為正數為大向後排序。

        TreeSet根據集合元素的大小按照升序排列,而自定義排序是按照特定的比較器排序(使用comparator接口,同時改寫compare(object 01,object o2)方法)。

Map 接口

      Map接口是Java集合框架中不同於Collection接口的另一個重要的接口,它對應的是一種從鍵(Key)到值(Value)對應關系的集合。Map類型有兩組對象,key和value,key不能重復,value可以重復。

      Map接口中定義了Map對象所共有的方法:基本操作、批量操作、Collection視角的操作(提供了將Map轉化為Collection的手段)

      Map的基本方法:get(object key)返回與指定鍵相關的值 、put(object key,object value)向該映射添加鍵值對、remove(object key)刪除指定的鍵值對

containsKey(object key)如果該映射包含指定鍵返回true、containsValue(object value)如果該映射包含指定值返回true、keySet()、values()

      

      Map特點:我們可以設置有意思的鍵(如將用戶名設置為key鍵);Map不能同時遍歷鍵和值,只能遍歷其中之一。

  

  HashMap

      基於哈希算法的Map接口實現。必須重寫hashcode()和equals方法。

      hashMap使用哈希碼通過鍵對其內容進行快速的查找。

  TreeMap

      TreeMap類是基於紅黑樹算法的Map接口實現,其鍵的存放方式和TreeSet相似,存放在樹中,鍵的順序按照自然順序或者自定義順序兩種方式排列。因為其考慮到了排序問題,故速度比HashMap慢。

工具類Collections和Arrays

     工具類Collections和Arrays提供了大量方法,對元素進行排序、查詢、修改等操作,且都是靜態方法。

     Collections.Sort(object o)自然順序排序、Collections.reverse(object o)反轉排序、Collections.shuffle(object o)混排

     此外Collections還提供了多個靜態方法用於創建線程安全的同步集合:

          1.synchronizedCollection(Collection c)返回一個線程安全的collection。

          2.synchronizedList(List list)返回一個線程安全的list

          3.synchronizedSet(Set s)返回一個線程安全的set

          4.synchronizedMap(Map m)返回一個線程安全的map  

    Arrays類

        用來操作數組的排序和搜索等。

    Hashtable的子類Properties

        用於處理屬性文件夾,將Map形式的鍵值對數據存在一個擴展名為“.properties”的文本文件中,作為軟件的配置文件。

      Properties類的主要方法:

          1.getProperty(String key)根據屬性鍵key獲取對應的值。

          2.setProperty(String key,String value)設置屬性

          3.load(InputStream in):從輸入流中裝載全部屬性

          4.store(OutputStream out,String comments)將屬性內容通過輸出流輸出

Java集合框架1