免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
集合專題(Collection)



                          做什么事情都要先明確其大綱

一:為什么會出現(xiàn)集合框架
       由來:早期是沒有集合框架這一說的,因為當時有數(shù)組就可以了。但是隨著Java的發(fā)展與市場的不斷需

       求,就出現(xiàn)了集合框架,比如數(shù)組時存儲基本數(shù)據(jù)類型的,當然也可以存儲自定義類型,但是其長度必

       須是固定的,查詢刪除修改元素的時候,都必須通過角標。這就很不方便,為什么呢?因為你通過角操

       作數(shù)據(jù),那么你怎么記著每個具體元素對應的角標呢?比如一個數(shù)組中有{d,b,t,g},等過段時間后,

       你怎么知道t在數(shù)組中的那個問題呢?
       所以Java在早期就出現(xiàn)了原始的集合Vector,由于早期注重的是安全,所以其為線程安全的。但是隨著

       市場需求的不斷增多,效率就成了社會的主流,這時Vector就不能滿足需求,就需要有新的效率高的集

       合來代替。這就出現(xiàn)了集合框架,根據(jù)面向對象的思想,不可能讓一個集合具有所有的優(yōu)點,因為這不

       現(xiàn)實。 所以就出現(xiàn)了多個不同的集合,這些不同的集合都有各自的特點,但又有共同的方面,所以為

       了讓他們有歸宿并且形成體系,就把他們共性的方面給抽取出來,形成他們的父類,讓特征不同的集合

       繼承,這樣就有了集合框架。
二:集合框架與數(shù)組的區(qū)別:
     1:最大的區(qū)別集合框架存儲的是引用數(shù)據(jù)類型,不能是基本數(shù)據(jù)類型
     2:集合的長度是可變的,數(shù)組的是不可變的
三:集合框架的體系結構

                                    Collection
   
                    List               Vector              Set

          ArrayList      LinkedList                 HashSet     TreeSet
                          LinkedHashSet
 

四:看體系的方法:
    要看一個體系,首先要看的就是他們的最底層,所以我們先看框架集合的祖宗Collection。。。。。。

  1:Collection有什么特點
      規(guī)律一:凡是祖宗一般其必為接口,遺憾的是Collection沒有逃脫這個規(guī)律,它也是接口。那么接下來

              我們就要看這個接口(對象)
   其特點
       1:長度可變(說明是數(shù)組)
       2:元素可以重復(所以有角標),因此第三點可以不說
       3:元素有角標
  有哪些行為呢?
      一個類(對象)中無非要么是方法(功能),要么是屬性,要么是二者都有。遺憾的是Collection只有

      功能(方法),所以接下來看看它有
  什么具體方法?
     一個對象所具有的方法不過以下四類:增刪改查
 1:增:
     所以我們先看Collection的增加的方法,試想如果是自己定義,參數(shù)是什么,返回值是什么?
    如果是我定義的,肯定需要參數(shù),沒有返回值。這是我初次的想法,但是如果添加不成功怎么辦?所以之

    前的想法是錯的,必須有返回值但是返回值是什么類型的好呢?試想,如果是int型的,添加成功返回1,

    不成功返回0,這可以。但是有另一種更加好的返回類型,boolean型,成功返回true,不成功返回false,

    這也可以。
    但為什么比int型更好呢?
    因為我們有時候不必寫返回值true與false,比如 returna>b;如果成功,自己就可以返回true但是如果返

    回的是int型,就需如下
       if(a>b) return1;
       else 0;
    這樣寫不但代碼繁瑣而且格式不優(yōu)美,所以其add方法如下
       booleanadd(E e);//添加單個元素到集合中
     boolean add(Collection<? extendsT> c)//把一個集合中的元素添加到另外一個集合中
  2:刪
    刪除集合中的元素:
    以為Collection補充了數(shù)組的不足,刪除元素通過對象,而不是角標返回值為boolean
    boolean remove(Object o);
    boolean revoveAll(Collection<?extends T> c);//查找并移除集合中相同的元素
    void clear();
 3:查:
    boolean contains(Object o)//元素是否包含在指定集合中
    boolean contionsAll(Collection<? extendsT> c);//參數(shù)集合是否包含的指定集合中
    boolean isEmpty();//集合是否為空
    boolean retaionAll(Collection<?extends T> c);//查找并保留相同的元素
  4:取
    如何的把集合中的元素全部的取出來,是非常重要的一個方面,但是Collection也為我們提供好了功能
    其參數(shù)是什么呢?因為是取集合自身的元素,所以沒有參數(shù)。
    但是返回值類型是什么呢?
    因為每個子類的特點不一樣,所以他們存儲的數(shù)據(jù)也是不一樣的,所以導致他們的取出方式更是不一樣,
   所以返回的應該是怎么去元素的那個對象,即迭代器Iterator iterator()
 5:其它功能
   由于數(shù)組胡集合有很多的相識型,所以集合就產生一個將集合轉為數(shù)據(jù)的方法返回值理應為Object型的數(shù)

   組,不想要參數(shù),因為涉及到的只是自己在轉變,如何轉只有自己知道,所以無參 Object[]toArray();
   但是總是返回Object型的數(shù)組總是不舒服的,因為有時候我們知道具體的返回值類型,所以方法如下
    T[]toArray(T[] a);
  注意:
   在參數(shù)中可以指定數(shù)組的長度也可以不指定,如果指定的數(shù)組大小小于集合中的元素個數(shù),則會重新創(chuàng)建一

   個默認的能裝下集合元素的數(shù)組
    如果指定的數(shù)組大了,則多余的用null填充,
   所以最好的是指定一個與集合元素個數(shù)相同的數(shù)
  總結
  這些都是所有集合都具有的共性內容,所以下面看他下面的子類的特有功能吧。。。。。。。。
  

--------------------------------------------------------------------------------------------------

  注意:Collection集合的特點之一就是元素有下標,但是我們在其具體的方法上并沒有看到太多使用下標的情

       況。為什么呢?
      因為它是集合框架的超級接口,它所有的是元素共有的方法。
      因此,這些具體的方法都是在其子類里面,首先看一下他的第一個我們常用的子類

 

 List集合:

  1:List的由來
   list集合不幸的是也是一個接口,因為Collection的體系過于龐大,單靠Collection一個是沒辦法完成所有

    公共
   方法的抽取,所以出現(xiàn)了兩個子接口,而這兩個子接口的子類才是真正的執(zhí)行者
  2:List的特點
     1:有序集合(存取一致)
     2:元素可以重復
     3:每個元素都要角標(既可以通過角標也可以通過元素操作)
  3:List的功能:
     由于繼承的是Collection,所以除了擁有Collection中的方法外,還有自己特有的方法

     1:增
        boolean add(Object e);//原有的功能
        void add(int index ,E element);//新功能
     新的方法為什么沒有返回值呢?
      說真的,它應該也有返回類型的,但是由于是后出來的,所以它的異常被封裝處理了,所以沒有返回值

      類型
       booleanaddAll(Collection<? extends T>);//原有功能
       boolean addAll(intfrom,Collection<? extends T>t);//新功能更
    不足之處
      我感覺它少封裝了一個方法,就是boolean addAll(int from,intto,Collection<? extends T> t)應該

      是截取一個集合到另一個集合中
       subList(intfrom,int to,Collection<? extends T>c);
   2:刪;
       boolean remove(E e);//原有方法
       boolean remove(int index);//新方法
       boolean removeAdd(Collection<?extends T> c);
       void clear();
   3:查
     E get(int index);
     int indexOf(Object o);
     int lastIndexOf(Object o);
   4:包含與判斷
     boolean contains(Object c);
     boolean containsAll(Collection<?extends T> c);
     boolean isEmply();
     int size();
   5:取所有元素
    1:父類中的方法(Itrator),在操作的時候,數(shù)組不能改變
    2:特有方法
     ListItrator在操作的時候,數(shù)組可以自由改變
    
List子類

List 有2個子類
  1:首先看ArrayList這個子類
     我們說過,只有到了List的子類,才可以知曉他們各自具有的特點,才可以說他們具體的用途,所以就讓

     我們拭目以待吧
    1:Arraylist特點
          1:其內部封裝了一個可變長度的數(shù)組,默認大小為10
           2:由于每個元素都有下標,所以查詢速度很快。
    2:什么時候是使用?
       當需要查詢數(shù)據(jù)的時候使用最好
 2:LinkedList集合
         有人會問,既然ArrayList那么的好用,為什么還要出現(xiàn)LinkedList呢?
         因為ArrayList數(shù)組的長度是可變的,我們查詢的時候沒有問題,但是當我們重復的刪除添加一個元

        素的時候,整個數(shù)組都在進行著重新的變動,這就又帶來了效率的下降,所以就出現(xiàn)了LinkedList,

        所以我們來看其有什么特點吧
    1:LinkedList特點
        1:底層結構為鏈表結構,長度可變
         2:由于是鏈表所以增加與刪除第一與最后一個的速度快
   2:什么時候用呢?
       當需要頻繁對元素進行增刪的時候用最好
   3:剛才之所以沒有提ArrayLit的功能,主要是因為它繼承了父類中的,自己本身沒有什么特殊的方法,但

     是LinkedList不同因為他又自己特有的方法,具體如下
    1:刪除:
       booleanremoveFirse();//有異常
       boolean removeLast();
       新的為
       boolean pollFirst();
       booleanpollFirst();//返回null,沒有異常

       獲?。?/p>

        booleangetFirst();
       boolean getLast();

     新的為
       boolean peekFirst();
       boolean peekLast();
 
說完List,開始說SetSet與List一樣,也是Collection的子類,也是接口
   set具有以下特點
        1:元素無序
         2:元素不重復
set及其子類沒有太多自己特有的方法,所以省略接下來重點看其子類
HashSet集合

    1:特點:
          1:底層是hash表結構,所以查詢速度比較快
           2:元素不能重復
    2:什么時候使用?
        當元素無序且不重復的時候使用,這就是涉及到了一個問題,怎么判斷元素是否重復,怎么把重復的

       元素過濾掉呢?
        因為系統(tǒng)是根據(jù)hash算法算出每個元素的具體值,所以確保了元素的唯一性。但是萬一他們有相同的

        hash值的時候,該怎么辦?

        這時候就需要判斷他們的內容是否相同,如果2個值的hash值相同,但是內容不同他們也是不同的元

        素,這時系統(tǒng)會根據(jù)別的條件重新算hash值。雖然底層的hash算法可以確保元素的唯一,但是其

        equals方法卻不能,因為equals繼承的是Object的方法,其比較的是指針是否相 而不是內容是否相

       同,所以我們在使用HashSet的時候,必須覆寫hashCode與equals方法。
       如果HashCode值不同,則不判斷equals
       如果hashCOde值相同,則判斷equals中內容是否相同,如果相同,則為同一個值,不同,則為不同的

       值,存到集合中。

       判斷兩個對象是否是同一個:Hashcode值與內容
  3:如果我想讓存取是一致的,那么我們需要 HashSet的子類LinkHashSet
 TreeSet集合

    1:特點
      1:底層是二叉樹結構
      2:進行自然排序,所以存取的數(shù)據(jù)是有序的
     2:什么時候使用?
      當需要存入的數(shù)據(jù)是有序的時候使用
   3:TreeSet實現(xiàn)排序的方式?
         1:可以讓存入的元素自己具備排序功能,需要實現(xiàn)Comparable接口中的computo方法但是更多的時

            候,要存入的元素不是我們寫的,而是別人寫好的,這時候我們要是先排序,該怎么辦呢?
            這就有了第2中方式:傳入比較器

        2:在TreeSet的構造方法中,可以通過傳入比較器來實現(xiàn)按指定的方式進行比較現(xiàn)比較器需要實現(xiàn) 

          comparator接口中未實現(xiàn)的方法即可

  到此為止我把自己所理解的Collection集合已經詳細的總結完畢,望多多提出意見與建議。

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
集合總結
java集合與包裝類
JAVA學習入門 對初次接觸者 相當有用222,Java基礎,編程開發(fā),Java,好視點技術文檔
j2se學習筆記
徐葳【2019版最新】40小時掌握Java語言之07集合
Collection和Colections的區(qū)別是什么?
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服