Java 知識點

來源:互聯網
上載者:User

標籤:code   dict   而不是   .net   htm   span   操作   返回   detail   

ArrayList與LinkedList聯絡與區別:

二者都實現List介面。

1> ArrayList是實現基於動態數組的資料結構;LinkedList實現的是鏈表的資料結構。

2> 對於隨機訪問Get和Set,ArrayList優於LinkedList,因為LinkedList要移動指標;

3> 對於新增和刪除add、remove,LinkedList優於ArrayList,因為要移動資料;

可以這樣說:當操作是在一列資料的後面添加資料而不是在前面或中間,並且需要隨機地訪問其中的元素時,使用ArrayList會提供比較好的效能;當你的操作是在一列資料的前面或中間添加或刪除資料,並且按照順序訪問其中的元素時,就應該使用LinkedList了。

 

HashMap原理:

一般的資料存放區物理結構有兩種:順序儲存和鏈式儲存。順序儲存的優勢在於快速的尋找,鏈式儲存的優勢在於新增和刪除。為了打破二者的尷尬,HashMap就應運而生了。

HashMap的主幹是一個Entry數組。Entry是HashMap的基本組成單元。Entry是HashMap中的一個靜態內部類。

HashMap由數組+鏈表組成的,數組是HashMap的主體,鏈表則是主要為瞭解決雜湊衝突而存在的,如果定位到的數組位置不含鏈表(當前entry的next指向null),那麼對於尋找,添加等操作很快,僅需一次定址即可;如果定位到的數組包含鏈表,對於添加操作,其時間複雜度依然為O(1),因為最新的Entry會插入鏈表頭部,急需要簡單改變引用鏈即可,而對於尋找操作來講,此時就需要遍曆鏈表,然後通過key對象的equals方法逐一比對尋找。所以,效能考慮,HashMap中的鏈表出現越少,效能才會越好。

Put:

key -> hash(key) -> indexFor(hash(key)): 如果該對應資料已存在,執行覆蓋操作。用新value替換舊value,並返回舊value. 否則執行addEntry(hash, key, value, i);

Get:

public V get(Object key) {  //如果key為null,則直接去table[0]處去檢索即可。        if (key == null)            return getForNullKey();        Entry<K,V> entry = getEntry(key);        return null == entry ? null : entry.getValue(); }
final Entry<K,V> getEntry(Object key) {                    if (size == 0) {            return null;        }        //通過key的hashcode值計算hash值        int hash = (key == null) ? 0 : hash(key);        //indexFor (hash&length-1) 擷取最終數組索引,然後遍曆鏈表,通過equals方法比對找出對應記錄        for (Entry<K,V> e = table[indexFor(hash, table.length)];             e != null;             e = e.next) {            Object k;            if (e.hash == hash &&                 ((k = e.key) == key || (key != null && key.equals(k))))                return e;        }        return null;    }

get方法的實現相對簡單,key(hashcode)-->hash-->indexFor-->最終索引位置,找到對應位置table[i],再查看是否有鏈表,遍曆鏈表,通過key的equals方法比對尋找對應的記錄。

參考:http://www.cnblogs.com/chengxiao/p/6059914.html#t1

 

HashMap與HashTable的區別:

1> 所繼承的類不同,HashMap繼承AbstractMap ,而HashTable繼承Dictionary ;

2> HashMap線程不安全,方法是不同步的,HashTable線程是安全的,方法同步;

3> HashMap允許Null的K,V,而HashTable不允許;

總體來說,HashMap的效率要比HashTable高一些,通常會優先考慮使用。

參考:http://blog.csdn.net/java2000_net/article/details/2512510

 

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.