JAVA學習筆記——JAVA基礎文法(六)

來源:互聯網
上載者:User

Collection容器

1、首先我們要瞭解為什麼JAVA中要有容器?

  我們知道數組的長度一旦指定,程式在執行過程中就不能改變,正是因為數組有這樣的缺陷,所以才出現就(collection)容器,容器的大小可以任意改變,容器的大小就是根據你實際放入了多少的資料而相應的變大。

2、容器中包括Set  和List,那麼他們有什麼區別呢?

  Set是無序唯一的,底層是用Map實現的;List是有序不唯一的,底層是數組,所以可以用索引來得到值

  注意:在list中刪除資料時,當刪除的是裡面的整數資料類型時要知道使用封裝類型進行刪除,我們要知道JAVA會自動裝箱和拆箱  但是在Set就不需要使用封裝類型來刪除,因為Set中沒有索引

3、List又分為Arrylist和LinkedList,他們之間又有什麼區別呢?各適用於什麼情況呢?

  ArrayList(數組)的記憶體位址連續,這個容器中的資料是經常用來尋找的;LinkedList(鏈表)記憶體位址不連續,這個容器中的資料經常用來更新

4、Iterator(容器的迭代器)

  所有實現了Collection介面的類都有一個iterator方法,這個方法會得到一個實現了Iterator的類的對象;List雖然有索引,但是也可以使用JAVA5.0以後出來的增強for迴圈,其實就相當於.Net中的foreach(),但是因為不能方便的操作索引,只用於簡單的遍曆,如果增強for迴圈迭代的是容器的話內部預設的也是使用的Iterator迭代器實現的。但是也必須要使用迭代器來實現,因為這是唯一縣城安全的方法

5、Collections類

  該類提供了一系列的方法來對List進行操作,比如說我們自己寫的類要進行比較大小或者是排序,那麼和它相關的一切規則需要我們自己來定義,比如比較對象是否相等或者是判斷大小的規則,如果是要實現比較大小的類一定要實現Comparable介面然後重寫public int compareTo(Object o)方法,為了更美觀的輸出到控制台上也建議重寫public String toString()方法。

   如下程式調用collections類中的sort方法對list進行排序,在自己寫的類當中規定好排序的方法:

 1 import java.util.*; 2  3 public class test{ 4          public static void main(String[] args){ 5  6                    List<Person> list = new ArrayList<Person>(); 7                    list.add(new Person("jack",23)); 8                    list.add(new Person("tom",19)); 9                    list.add(new Person("rose",22));10                    list.add(new Person("mack",21));11                    list.add(new Person("twins",34));      12 13                    Collections.sort(list);  //因為該方法是靜態所以可以直接使用  類名.方法名 直接調用14                    System.out.println(list);15          }       16 }17 18 class Person implements Comparable{19 20          public Person(String name,int age){21                    this.name = name;22                    this.age = age;23          }24          String name;25          int age;26          public String toString(){27                    return "name "+this.name +" age:"+this.age ;28          }29          public int compareTo(Object o){30                    Person p = (Person)o;31                    if(this.age > p.age){32                      return 1;33                    }else if(this.age < p.age){34                             return -1;35                    }else{36                            return 0;37                    }38 39          }40 41 }

  6、JAVA5.0之後出現的泛型

  概念:指定當前的容器中只能放置什麼樣的類型,並且泛型中沒有父類的引用指向子類的對象

7、容器中為什麼會出現Map?

  因為Set是無序的,唯一的,hashSet沒有索引,不方便通過索引來對容器進行操作,所以出現了Map,所以Map就是可以建立索引,而且這個索引還是自己定義的。Map是以Key-value(鍵-值)對的形式來儲存資料的,添加資料是使用Map.put( index,value);index是自訂的類型,可以是自己規定的;擷取資料是使用Map.get(index) 其實Map就相當於List只是Map是添加了索引的功能

  Map的迭代方法有兩種:

  1)、先使用map.keySet()方法獲得map裡面的所有Key值封裝成Set類型,然後再使用set的iterator迭代器來進行迭代,獲得key值就可以獲得value值  如下代碼:

import java.util.*;public class test{public static void main(String[] args){                  Map<String,String> map = new HashMap<String,String>();          map.put("1","zhong");          map.put("2","ke");          map.put("3","wen");          map.put("4","good");          map.put("5","night !!");          Set<String> set = map.keySet();          for(Iterator i = set.iterator();i.hasNext();){                    String key = (String)i.next();                    System.out.println(map.get(key));          }}       }

 

  2)、使用Map中的EntrySet方法來獲得索引值對Entry,封裝成Set試圖在使用Set中的Iterator方法進行迭代。Entry代表的是一對key-value,我們可以把他看成是Map的屬性(成員變數)

  如下代碼所示:

import java.util.*;public class test{public static void main(String[] args){                 Map<String,String> map = new HashMap<String,String>();          map.put("1","zhong");          map.put("2","ke");          map.put("3","wen");          map.put("4","good");          map.put("5","night !!");           Set<Map.Entry<String,String>> entrys = map.entrySet();          for(Iterator<Map.Entry<String,String>> i = entrys.iterator();i.hasNext();){                    Map.Entry<String,String> entry = i.next();                    System.out.println(entry.getValue());          }    }       }

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.