java學習筆記(基礎篇)—集合

1、集合框架的組成,在java.util包中。

1)接口:定義須要實現的抽象方法。
2)實現類:將接口中的方法實現,如ArrayList,Hashtable等
3)算法:存放和操做數據的算法。如哈希算法,紅黑樹算法...java

Collection(頂層接口)
  -List(接口)
    -ArrayList
    -Vector
    -LinkedList
  -Set(接口)
    -HashSet
    -SortSet(接口)
      -TreeSet
  -Map(接口)
    -HashMap
    -TreeMap
    -Treetable
    ...

2、集合的層次結構

a):保存單值
Collection:定義保存單值的規範
——Set:定義保存不可重複無序單值的規範
———HashSet:哈希算法保存數據,檢索效率最高的
———SortedSet:定義在Set基礎上進行排序的規範
———TreeSet:實現排序規則
——List:定義保存可重複有序單值的規範
——LinkedList:使用鏈表實現List接口
——Vector:使用數組實現List接口,線程安全的
——ArrayList:使用數組實現List接口,線程不安全算法

b)保存鍵值對(key---value)
Map:定義保存鍵值對的規範(key不能重複,value可重複)
——HashMap:是線程不安全,效率高,HashMap容許null key和null value,
——HashTable:是線程安全,Hashtable不容許null key和null value,
——SortedMap:定義在Map的基礎上進行排序的規範(根據key排序)
——TreeMap:對map進行排序數組

c)Map類中的方法:HashMap,Hashtable
put(Object key,Object value):添加數據到map集合中
Set keySet():將map中全部的key取出來放在set集合中
Object get(Object key):從map集合中獲取數據。
Set entrySet():將map中的key和對應的value從新建立成新的對象(Map.Entry)放在set集合中。
Map.Entry:getKey()
Map.Entry:getValue()
Set values():將map中全部的value取出來放在collection集合中安全

interface Map{
    static interface Entry{
    }
}

3、加強for循環

a)以前的for循環
for(初始化變量;循環條件;變量的控制){
循環體
}
b)加強for循環:方便遍歷集合和數組
for(type element : array){
循環體
}
type:數組或集合中數據的數據類型
element:臨時變量
array:數組或集合的引用
注意:加強for遍歷的集合必須是實現Iterable接口。不能明確指出數據的下標(位置)框架

4、set添加元素的時候,如何判斷兩個對象是否相等?

1)先比較hashCode的值,若是hashCode的值不相等,
不會比較equals方法,直接返回兩個對象不相等。
2)先比較hashCode的值,若是hashCode的值相等,
再比較equals方法,若是equals比較兩個對象不相等,
返回這兩個對象不相等。線程

5、如何判斷元素應該添加在set集合的那個地方?(hashCode的做用)

1)使用哈希算法能夠提升檢索的效率。
哈希算法底層有一張哈希表。哈希表相對於數組。
哈希表的長度根據算法本身的計算出來的。
2)底層使用哈希算法決定對象所存放的位置code

​ 所放的位置=經過對象的hashCode%哈希表的長度對象

一個對象默認hashCode值是由對象的地址根據必定算法計算而得出來的。set中添加元素判斷對象是否相同須要重寫hashCode方法和equals方法。
如何重寫hashCode方法:在java.lang.Object中
重寫hashCode方法建議:每一個不一樣的對象放在不一樣的位置將全部會影響判斷對象是否相同的屬性的hashCode值相加。排序

public int hashCode(){
    //return 1;
    return 全部的屬性的hashCode值相加;
 }

6、TreeSet,TreeMap排序:

1)天然排序:將須要排序的類實現java.lang.Comparable接口

interface java.util.Comparator{
    public int compare(Object o1,Object o2){
        ..排序規則
    }
}

2)覆蓋排序:建立TreeSet,TreeMap對象指定排序規則。 當該類沒法指定天然排序,就只能使用覆蓋排序。如final String類不能用天然排序,只能用覆蓋排序。

******覆蓋排序的優先級高於默認排序
Set set = new TreeSet();
set.add("b");
set.add("a");
set.add("d");
set.add("c");
***該代碼有沒有問題?若是沒有問題輸出什麼內容?

public class Student implements Comparable{
    public int compareTo(Object obj){
        ..排序規則
    }
}

個人博客即將同步至騰訊雲+社區,邀請你們一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=cop0ecwykw1c

相關文章
相關標籤/搜索