韓順平 java 第21講、第22講、第23講、第24講 集合

爲什麼用集合?

想象一下,當你要做一個公司職員薪水管理系統的時候,不先考慮數據庫,這時候如果用數組的話,固然是可以的,但是數組很不方便,因爲數組的大小把握不了,當有員工的增加或者刪除的時候,可能會導致數組的大小不夠或者數組浪費。
當然可以用鏈表來解決,但是鏈表還不是最佳選擇,這就引出了集合。可以動態的添加和修改。

java 集合類

  1. List結構的集合類:ArrayList類、LinkedList類、Vector類、Stack類
  2. Map結構的集合類:HashMap類、HashTable類
  3. Set結構的集合類:HashSet類、TreeSet類
  4. Queue結構的集合:Queue接口

ArrayList

首先引入包

import java.util.*;

然後定義ArrayList對象

ArrayList a = new ArrayList();
a_size = a.size();//a_size = 0,此時的大小爲0

//向a中添加數據,類型是Object,也就是說可以添加任意類型的數據
Clerk clerk1 = new Clerk("song",50);
a.add(clerk1);//將元素加到列表的尾部,此時a的大小就是1了
Clerk clerk2 = new Clerk("wu",20);
a.add(clerk2);

//如何訪問a中的數據?
//Clerk temp = a.get(0);這句錯誤,因爲get函數返回的是Object類型。把一個子類交給一個父類,可以自動轉換,但是把一個父類交給一個子類就不行了,可以強制轉換
Clerk temp = (Clerk)a.get(0);//取出第一個數據,這裏和數組的下標差不多

//遍歷所有的數據
for(int i =0;i < a.size();i++){
    Clerk temp = (Clerk)a.get(i);
    //.....
}
a.add(clerk1);//再次放一次也可以!

//刪除元素
a.remove(1);

LinkedList

很多方法和ArrayList都差不多但是多了下列幾個:

LinkedList ll = new LinkedList();
ll.addFirst(a1);//把a1加在最前面
ll.addLast(a2);//把a2加在最後面
ll.remove(1);

Vector 向量

多數方法和上面類似,但是區別是,

Stack 棧

HashMap

HashMap hm = new HashMap();
hm.put("01",emp1);
hm.put("02",emp2);
hm.put("02",emp3);//此時,“02”對應的值更新了,Key值不能相同!
if(hm.containKey("02")){
    Emp emp = (Emp)hm.get("01");
}
Iterator it = hm.keySet().iterator();
while(it.hasNext()){
    String key = it.next().toString();
    Emp emp = (Emp)hm.get(key);
}

HashMap 和HashTable區別

  • HashTable是同步的,這個類中的一些方法保證了HashTable中的對象是線程安全的,而HashMap則是異步的,因此HashMap中的對象不是線程安全的,因爲同步的要求會影響執行的效率,所以如果你不需要線程安全的集合那麼使用HashMap是一個很好的選擇,這樣可以避免由於同步帶來的不必要的性能開銷,從而提高效率。
  • HashMap可以讓你將一個空值作爲一個表的條目的key或velue,但是HashTable是不能放入空值的。

ArrayList 和 Vector的區別

  • Vector是同步的,Arraylist是異步的。
  • 從內部機制來講二者都是用數組來控制集合中的對象。如果長度增加超過了內部數組的長度,它們需要增加目前的長度來擴展內部數組的長度,Vector缺省情況下自動增長原來的一倍,ArrayList是原來的50%。

總結

  1. 如果考慮線程安全,考慮:Vector,HashTable
  2. 如果不要求線程安全:ArrayList、LinkedList、HashMap
  3. 如果要求鍵值對,則使用HashMap、HashTable
  4. 如果數據量很大,又要線程安全,則Vector
  5. 其實這些都可以用到java中的多態,這樣更加靈活,比如:
    List l = new ArrayList();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章