Day12-13 Java集合

weixin_33890499發表於2016-08-02

集合

  • 物件的儲存:①陣列(基本資料型別 & 引用資料型別) ②集合(引用資料型別)

陣列儲存資料的弊端:長度一旦初始化以後,就不可變;真正給陣列元素賦值的個數沒有現成的方法可用。

Collection介面

  • 方法:
    ①增加add(Object obj)
    addAll(Collection coll)
    size() clear() isEmpty();
    ②刪除remove(Object obj) removeAll(Collection coll)
    retainAll(Collection coll) :做交集返回給當前集合
    contains(Object obj) : 自定義類需重寫equals方法,判斷物件內屬性值是否相同
    containsAll(Collection coll) hashCode()
    ③ 遍歷iterator() toArray();
    增強for迴圈 for(Object i : col)
|------List介面:儲存有序的,可以重複的元素.

---相當於“動態”陣列
---新增的方法:
刪除remove(int index)
修改set(int index,Object obj)
獲取get(int index)
插入add(int index,Object obj)>

|------ArrayList(主要的實現類)
|------LinkedList(更適用於頻繁的插入、刪除操作)
|------Vector(古老的實現類、執行緒安全的,但效率要低於ArrayList)

|------Set介面:儲存無序的,不可重複的元素。
  • Set使用的方法基本上都是Collection介面下定義的。
  • 新增進Set集合中的元素所在的類一定要重寫equals() 和 hashCode()。要求重寫equals() 和 hashCode()方法保持一致。
  • 插入時首先比較hash值,如果在該hash值處沒有元素,直接插入,若hash值相同,比較equals()

1.無序性:無序性!= 隨機性。真正的無序性,指的是元素在底層儲存的位置是無序的。
2.不可重複性:當向Set中新增進相同的元素的時候,後面的這個不能新增進去。

|------HashSet(主要的實現類)
|------LinkedHashSet(是HashSet的子類,當我們遍歷集合元素時,是按照新增進去的順序實現的;頻繁的遍歷,較少的新增、插入操作建議選擇此
|------TreeSet(可以按照新增進集合中的元素的指定屬性進行排序)

要求TreeSet新增進的元素必須是同一個類的!
兩種排序方式:
自然排序:①要求新增進TreeSet中的元素所在的類implements Comparable介面②重寫compareTo(Object obj),在此方法內指明按照元素的哪個屬性進行排序③向TreeSet中新增元素即可。若不實現此介面,會報執行時異常
定製排序:①建立一個實現Comparator介面的實現類的物件。在實現類中重寫Comparator的compare(Object o1,Object o2)方法②在此compare()方法中指明按照元素所在類的哪個屬性進行排序③將此實現Comparator介面的實現類的物件作為形參傳遞給TreeSet的構造器中④向TreeSet中新增元素即可。若不實現此介面,會報執行時異常
要求重寫的compareTo()或者compare()方法與equals()和hashCode()方法保持一致。

Map介面:

  • 儲存“鍵-值”對的資料
  • key是不可重複的,使用Set存放。value可以重複的,使用Collection來存放
  • 一個key-value對構成一個entry(Map.Entry),entry使用Set來存放。
  • 操作

新增、修改 put(Object key,Object value)
刪除remove(Object key)
獲取get(Object key)
size() containsKey() containsValue()
keySet() values() entrySet()

|-----HashMap:主要的實現類,可以新增null鍵,null值
|-----LinkedHashMap:是HashMap的子類,可以按照新增進Map的順序實現遍歷
|-----TreeMap:需要按照key所在類的指定屬性進行排序。要求key是同一個類的物件。對key考慮使用自然排序 或 定製排序
|-----Hashtable:是一個古老的實現類,執行緒安全的,不可以新增null鍵,null值不建議使用。
|-----子類:Properties:常用來處理屬性檔案Iterator介面:用來遍歷集合Collection元素

Collections工具類:操作Collection及Map的工具類,大部分為static的方法。

附:Properties的使用
Properties pros = new Properties();
pros.load(new FileInputStream(new File("jdbc.properties")));
String user = pros.getProperty("user");
System.out.println(user);
String password = pros.getProperty("password");
System.out.println(password);