国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

介紹Collection框架的結構;Collection 和 Collections的區別

2019-11-08 02:26:13
字體:
來源:轉載
供稿:網友

集合框架:

Collection:List列表,Set集

Map:Hashtable,HashMap,TreeMap

 

Collection  是單列集合

List   元素是有序的、可重復

有序的 collection,可以對列表中每個元素的插入位置進行精確地控制。

可以根據元素的整數索引(在列表中的位置)訪問元素,并搜索列表中的元素。 

可存放重復元素,元素存取是有序的。

List接口中常用類

Vector:線程安全,但速度慢,已被ArrayList替代。

底層數據結構是數組結構

ArrayList:線程不安全,查詢速度快。

            底層數據結構是數組結構

LinkedList:線程不安全。增刪速度快。

             底層數據結構是列表結構

 

Set(集) 元素無序的、不可重復。

取出元素的方法只有迭代器。不可以存放重復元素,元素存取是無序的。

Set接口中常用的類

HashSet:線程不安全,存取速度快。

        它是如何保證元素唯一性的呢?依賴的是元素的hashCode方法和euqals方法。

TreeSet:線程不安全,可以對Set集合中的元素進行排序。

 它的排序是如何進行的呢?通過compareTo或者compare方法中的來保證元素的唯一性。元素是以二叉樹的形式存放的。

 

 

Map  是一個雙列集合

|--Hashtable:線程安全,速度快。底層是哈希表數據結構。是同步的。

不允許null作為鍵,null作為值。

      |--PRoperties:用于配置文件的定義和操作,使用頻率非常高,同時鍵和值都是字符串。

是集合中可以和IO技術相結合的對象。(到了IO在學習它的特有和io相關的功能。)

|--HashMap:線程不安全,速度慢。底層也是哈希表數據結構。是不同步的。

允許null作為鍵,null作為值。替代了Hashtable.

   |--LinkedHashMap: 可以保證HashMap集合有序。存入的順序和取出的順序一致。

|--TreeMap:可以用來對Map集合中的鍵進行排序.

 

 

Collection 和 Collections的區別

 

Collection是集合類的上級接口,子接口主要有Set 和List、Map。 

Collections是針對集合類的一個幫助類,提供了操作集合的工具方法:一系列靜態方法實現對各種集合的搜索、排序、線程安全化等操作。

java.util包中包含了一些在Java 2中新增加的最令人興奮的增強功能:類集。一個類集(collection)是一組對象。類集的增加使得許多java.util中的成員在結構和體系結構上發生根本的改變。它也擴展了包可以被應用的任務范圍。Java的類集(Collection)框架使你的程序處理對象組的方法標準化。在Java 2出現之前,Java提供了一些專門的類如Dictionary,Vector,Stack和Properties去存儲和操作對象組。盡管這些類非常有用,它們卻缺少一個集中,統一的主題。因此例如說使用Vector的方法就會與使用Properties的方法不同。以前的專門的方法也沒有被設計成易于擴展和能適應新的環境的形式。而類集解決了這些(以及其他的一些)問題        Java類集框架的優勢:        1) 這種框架是高性能的。對基本類集(動態數組,鏈接表,樹和散列表)的實現是高效率的。一般很少需要人工去對這些“數據引擎”編寫代碼(如果有的話)。        2) 框架允許不同類型的類集以相同的方式和高度互操作方式工作。        3) 類集是容易擴展和/或修改的。為了實現這一目標,類集框架被設計成包含一組標準的接口。對這些接口,提供了幾個標準的實現工具(例如LinkedList,HashSet和TreeSet),通常就是這樣使用的。如果你愿意的話,也可以實現你自己的類集。為了方便起見,創建用于各種特殊目的的實現工具。一部分工具可以使你自己的類集實現更加容易。        4) 增加了允許將標準數組融合到類集框架中的機制。        類集的整體框架如下:

        Collection接口是構造類集框架的基礎。它聲明所有類集都將擁有的核心方法。因為所有類集實現Collection,所以熟悉它的方法對于清楚地理解框架是必要的。

        boolean add(E e):向集合中增加元素,如果該類型集合允許有重復元素(如:ArrayList、LinkedList等)或者不允許有重復元素但新添加的元素不在集合中則返回true,如果該類型集合不允許有重復元素并且新添加的元素已經在集合中則返回false。

        boolean addAll(Collection<? extendsE> c):將一個類集c中的所有元素添加到另一個類集(本類集)。

        void clear():清除本類集中所有元素,調用完該方法后本類集將為空。

        boolean contains(Object o):如果本類集包含元素e,并且滿足(o==null ?e==null : o.equals(e))則返回true,否則返回false。

        boolean containsAll(Collection<?> c):如果本類集包含指定類集c中的所有元素則返回true,否則返回false。

        boolean equals(Object o):如果本類集的equals方法是我們自己重寫的,則具體兩個類集怎樣才算equal(是引用相等還是值相等且順序相同),我們自己決定。如果類集的equals方法不是我們重寫的,則當兩個類集類型為List(包括ArrayList和LinkedList,元素可以重復)時,必須兩個類集的元素個數相等,元素順序相同,且相同位置的元素對應相等才返回true,否則返回false;當兩個類集類型為Set(包括HashSet和TreeSet,元素不能重復)時,只須兩個類集的元素個數相等,并且一個類集中的任一個元素在另一個類集中都能找到相同的元素(不必順序相同,因為Set是無序的),則返回true,否則返回false。

        int hashCode():返回本類集的hash code值,具體算法依賴于類集中元素的值和類型,在后面的討論中會講到。

        boolean isEmpty():若本類集沒有元素則返回true,否則返回false。

        Iterator<E> iterator():返回本類集中所有元素的迭代函數,至于從該函數中取出的元素的順序依賴于本類集的類型,若為List則按List的順序取出,若為Set則無序。

        booleanremove(Object o):若本類集中有值與o的值相等的元素,則刪除該元素,并返回true,若沒有則返回false。當類集類型為List時,有可能有多個元素與o的值相等,此時,只會刪除第一個值為o的元素,其他元素位置不變。

        boolean removeAll(Collection<?>c):刪除本類集中與指定類集c中的元素相等的所有元素,不管有多少個元素,只要在c中出現了,調用后d中就不會出現。若調用后本類集的元素有改變(即有元素被刪除),則返回true,否則返回false。

        boolean retainAll(Collection<?>c):保持本類集中在指定類集中出現過的所有元素,即刪除本類集中不包含在指定類集c中的所有元素。若調用后本類集的元素有改變(即有元素被刪除),則返回true,否則返回false。

        int size():返回本類集中元素的個數,但大小不能超過0x7fffffff,若超過則返回0x7fffffff。

        Object[] toArray():返回一個包含了本類集中所有元素的數組,數組類型為:Object[],因為底層是通過iterator()方法來傳值的,所以數組中元素的順序同樣依賴于本類集的類型,若為List則按List的順序放入數組,若為Set則無序。

        <T>T[] toArray(T[] a):以泛型的形式來傳遞返回數組的類型,其他與Object[]toArray()方法類似。

直接繼承Collection接口的有List<E>、Queue<E>、BeanContext和Set<E>四個接口,其中我們用的最多的是List<E>和Set<E>這兩個接口,后面的博文將會詳細分析;另外兩個接口用的相對較少,一般要實現這兩個接口的功能時都是開發者自己重新實現,在此不作詳細分析。

        說明:部分內容來自網絡!后面將會對常用的接口和類作詳細分析,希望跟各位網友共同進步,不對的地方歡迎大家指正!

 

        測試代碼如下:

[java] view plaincopypublic class CollectionTest  {      public static void main(String[] args)      {          Collection<String> c = new ArrayList<String>();          Collection<String> d = new ArrayList<String>();                    c.add("1");          c.add("2");          c.add("1");          c.add("3");          c.add("1");          c.add("3");          c.add("3");          c.add("2");          c.add("3");            //      c.remove("3");                    d.add("2");          d.add("1");          d.add("4");                    System.out.println(c.equals(d));          System.out.println(c);          System.out.println(d);          System.out.println(c.hashCode());          System.out.println(d.hashCode());  //      System.out.println(c.removeAll(d));          System.out.println(c);          System.out.println("----------------------");                    Object[] o = c.toArray();          String s = null;          for(int i = 0; i < o.length; i++)          {              s = (String)o[i];              System.out.println(s);          }      }  }  
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安顺市| 双桥区| 九龙城区| 长沙市| 乌拉特前旗| 运城市| 方正县| 买车| 绥芬河市| 梓潼县| 察雅县| 西吉县| 新巴尔虎右旗| 铜鼓县| 渭南市| 蒲城县| 通辽市| 江华| 沂南县| 清河县| 永昌县| 华安县| 吉木乃县| 犍为县| 巴塘县| 南开区| 宝坻区| 大城县| 宜兰市| 大庆市| 融水| 岑巩县| 邳州市| 达尔| 大连市| 陇川县| 新昌县| 巴南区| 剑河县| 华坪县| 安化县|