java---Map接口實現類


  Map是一個雙列集合接口,如果實現了Map接口,特點是數據以鍵值對形式存在,鍵不可重復,值可以重復。java中主要有HashMap、TreeMap、Hashtable。本文主要介紹Map的接口方法:

1 HashMap、TreeMap、Hashtable

HashMap的存儲原理:

  HashMap 底層也是基於哈希表實現的。往HashMap添加元素的時候,首先會調用鍵的hashCode方法得到元素 的哈希碼值,然后經過運算就可以算出該元素在哈希表中的存儲位置。

  情況1: 如果算出的位置目前沒有任何元素存儲,那么該元素可以直接添加到哈希表中。

  情況2:如果算出 的位置目前已經存在其他的元素,那么還會調用該元素的equals方法與這個位置上的元素進行比較,如果equals方法返回 的是false,那么該元素允許被存儲,如果equals方法返回的是true,那么該元素被視為重復元素,不允存儲。

TreeMap存儲原理:

  TreeMap也是基於紅黑樹(二叉樹)數據結構實現 的, 特點:會對元素的鍵進行排序存儲。

  TreeMap 要注意的事項:
  1. 往TreeMap添加元素的時候,如果元素的鍵具備自然順序,那么就會按照鍵的自然順序特性進行排序存儲。
  2. 往TreeMap添加元素的時候,如果元素的鍵不具備自然順序特性, 那么鍵所屬的類必須要實現Comparable接口,把鍵的比較規則定義在CompareTo方法上。
  3. 往TreeMap添加元素的時候,如果元素的鍵不具備自然順序特性,而且鍵所屬的類也沒有實現Comparable接口,那么就必須在創建TreeMap對象的時候傳入比較器。

Hashtable存儲原理:

  底層也是hash表實現,實現方式和HashMap一致,但是hashTable是線程安全的,操作效率低。

  http://www.cnblogs.com/K-artorias/p/7090314.html 鏈接進去,文章講了hashMap和hashTable的區別。

2 Map接口的方法:
添加:
  put(K key, V value)
  putAll(Map<? extends K,? extends V> m)   
刪除
  remove(Object key)
  clear()

獲取:
  get(Object key)
  size()
判斷:
  containsKey(Object key)
  containsValue(Object value)
  isEmpty()

以下是上述接口方法的代碼舉例:

 1 public class Demo2 {
 2     
 3     public static void main(String[] args) {
 4         Map<String,String> map = new HashMap<String, String>();
 5         //添加方法
 6         map.put("A", "a");
 7         map.put("B", "b");
 8         map.put("C","c");
 9         
10         /*
11         添加
12         System.out.println("返回值:"+map.put("A","@"));  // 如果之前沒有存在該鍵,那么返回的是null,如果之前就已經存在該鍵了,那么就返回該鍵之前對應 的值。
13         Map<String,String> map2 = new HashMap<String, String>();
14         map2.put("M", "m");
15         map2.put("N", "n");
16         map.putAll(map2); // 把map2的元素添加到map集合中。
17         
18         */
19         
20         /*
21         刪除
22         System.out.println("刪除的數據是:"+map.remove("A")) ;  //根據鍵刪除一條map中的數據,返回的是該鍵對應 的值。
23         map.clear(); //清空集合中的所有數據。
24         */
25         
26         /* 獲取
27         System.out.println("根據指定 的鍵獲取對應的值:"+ map.get("B"));
28         System.out.println("獲取map集合鍵值對個數:"+map.size());
29         
30         
31         判斷
32         System.out.println("判斷map集合是否包含指定的鍵:"+ map.containsKey("B"));
33         System.out.println("判斷map集合中是否包含指定 的值:"+ map.containsValue("c"));
34         map.clear();
35         System.out.println("判斷map集合是否為空元素:"+ map.isEmpty());
36         */
37         System.out.println("集合的元素:"+ map);
38         
39         
40     }
41 
42 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM