Java基礎-集合架構

來源:互聯網
上載者:User

標籤:

首先,集合與數組的區別?
          1. 長度:     數組固定;集合可變。
          2. 儲存類型:     數組儲存基礎資料型別 (Elementary Data Type)和對象;集合只能儲存基礎資料型別 (Elementary Data Type)。
                                        數組儲存的元素必須是一個資料類型;集合儲存物件可以是不同類型。
                                       
集合類(為什麼出現集合類??)
     物件導向語言對事物的體現都是以對象的形式,所以為了方便對多個對象的操作,就對對象進行儲存,
     集合就是儲存物件最常用的一個方式。



Collection介面
     |--List:     有序,元素都有索引。     元素可以重複。
          |--ArrayList:     底層的資料結構是數組,線程不同步
          |--LinkedList:     底層的資料結構是鏈表,線程不同步
          |--Vector:     底層的資料結構是數組,線程同步
          取出list集合中元素的方式:
               get(int index):通過腳標擷取元素
               iterator():通過迭代方法擷取迭代器對象
         
     |--Set:     無序,不可以儲存重複元素。     必須保證元素唯一性。
          |--HashSet:     底層資料結構是雜湊表,線程不同步,無序高效。
                    HashSet集合保證元素唯一性:通過元素的hashCode方法,和equals方法完成。
          |--TreeSet:     底層資料結構是二叉樹,對集合中的元素進行指定順序的排序,不同步
                    用於對set集合進行元素的指定順序排序,排序需要依據元素自身具備的比較性。
                    1. 讓元素自身具備比較性,元素實現comparable介面,覆蓋compareTo方法。這種方式也稱為元素的自然排序
                   
                    class Student implements Comparable{     //該介面強制讓學生具備比較性
                         private String name;
                         private int age;
                        
                         Student(String name, int age){
                              this.name = name;
                              this.age = age;
                         }
                        
                         public int compateTo(Object obj){
                              if(!(obj instanceof Student))
                                   throw new RuntimeException("not a student");
                              Student s = (Student)obj;    
                             
                              if(this.age > s.age)
                                   return 1;
                              if(this.age = s.age)
                                   return this.name.compareTo(s.name);
                                  
                              return -1;
                         }
                    }
                   
                    2. 當元素自身不具備比較性時,或者具備的比較性不是所需要的,這時需要讓集合自身具備比較性。
                         定義一個實現了Comparator介面的比較子,並覆蓋compare方法,並將該類對象作為實際參數傳遞給TreeSet集合的建構函式。
                        
                    class StrLenComparator implements Comparator{     //元素自身具備比較性不是所需要的,定義比較子
                         public int compare(Object o1, Object o2){
                              String s1 = (String)o1;
                              String s2 = (String)o2;
                             
                              int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));
                              if(num == 0)
                                   return s1.compareTo(s2);
                                  
                              return num;
                         }
                    }

Iterator介面:     用於取集合中的元素。
          Iterator it = coll.iterator();
          while(it.hasNext()){
               System.out.println(it.next());
          }

Map集合
     |--Hashtable:     底層是雜湊表資料結構,是線程同步的。     不可以儲存null鍵null值
     |--HashMap:     底層是雜湊表資料結構,是線程不同步的。     可以儲存null,替代了Hashtable
     |--TreeMap:     底層是二叉樹結構,可以對map集合中的鍵進行指定順序的排序。
    
Map和Collection區別???
     |--Collection一次存一個元素;Map一次存一對元素。
     |--Map儲存元素用put方法;Collection使用add方法。
     |--Collection是單列集合;Map是雙列集合。
     |--Map中的儲存的一對元素:一個是鍵,一個是值,鍵與值之間有映射關係。
     |--Map集合沒有取出元素的方法,需要先轉成set集合,再通過迭代器取出元素。

    
     特點:要保證map集合中鍵的唯一性。
    
把Map集合轉成set的方法(map中沒有迭代器,所以想要取出map中的所有元素,需要將map集合轉成set集合)
     Set     keySet();
     Set     entrySet();     //取的是鍵和值的映射關係

     註:Entry就是Map介面中的內部介面:
          為什麼要定義在map內部呢?entry是訪問索引值關係的入口,是map的入口,訪問的是map中的索引值對。
    

使用集合的技巧:
     |--看到Array就是數組結構,有角標,查詢速度很快;
     |--看到link就是鏈表結構:增刪速度快,
                    而且有特有方法:addFirst,     addLast,     removeFirst(),     removeLast(),     getFirst(),     getLast()
     |--看到hash就是雜湊表,
                    就要想到雜湊值,
                    就要想到唯一性,
                    就要想到存入到該結構中的元素必須覆蓋hashCode,equals方法
     |--看到tree就是二叉樹,就要想到排序,就想到要用比較。
                    比較的兩種方式:實現Comparable介面,覆蓋compareTo方法
                                                            實現Comparable介面的比較子,覆蓋compare方法
     |--LinkedHashSet,LinkedHashMap:這兩個集合可以保證雜湊表存入順序和取出順序一致,保證雜湊表有序。
    
集合什麼時候用??
     |--當儲存的是一個元素時,就用Collection。當儲存物件之間存在映射關係時,就使用map集合
     |--保證唯一,就用set;不保證唯一,就要list
    
Collection和Collections區別??
     |--Collections是個java.util下的類,是針對集合類的一個工具類,提供一系列靜態方法,實現對集合的操作。
     |--Collection是個java.util下的介面,是各種集合結構的父介面。


                   
泛型:JDK1.5版本以後出現的新特性,用於解決安全問題,是一個安全機制。

 泛型格式:通過<>來定義要操作的引用資料類型。<>就是用來接受類型的。
  好處:      1. 將運行時期出現的問題,轉移到了編譯時間期,方便程式員解決問題,讓運行時問題減少,安全。      2. 避免了強制轉換的麻煩。 在使用java提供的對象時,什麼時候寫泛型呢?通常在集合架構中很常見。 什麼時候定義泛型類?當類中要操作的引用資料類型不確定的時候,早期定義Object來完成擴充,現在定義泛型來完成擴充。 泛型類定義的泛型,在整個類中有效。如果被方法使用,
那麼泛型類的對象明確要操作的具體類型後,所有要操作的類型就已經固定了。

為了讓不同方法可以操作不同類型,而且類型還不確定。那麼可以將泛型定義在方法上。   靜態泛型:     靜態方法不可以訪問類上定義的泛型,如果靜態方法操作的應用資料類型不確定,可以將泛型定義在方法上。 泛型介面:泛型定義在介面上


     

Java基礎-集合架構

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.