淺談Java中的Hashmap

HashMap:

       java.lang.Object html

      java.util.AbstractMap<K,V>
       ∟ java.util.HashMap<K,V>

  類型參數:java

  K - 此映射所維護的鍵的類型
  V - 所映射值的類型
  public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable

   HashMap是基於哈希表的 Map 接口的實現。此實現提供全部可選的映射操做,並容許使用 null 值和 null 鍵。(除了非同步和容許使用 null 以外, HashMap 類與 Hashtable 大體相同。)此類不保證映射的順序,特別是它不保證該順序恆久不變。

   HashTable:         

    java.lang.Object
       ∟java.util.Dictionary<K,V>
           ∟java.util.Hashtable<K,V>數組

  類型參數:安全

  K - 此映射所維護的鍵的類型
  V - 所映射值的類型
       public class Hashtable<K,V>extends Dictionary<K,V>implements Map<K,V>, Cloneable, Serializable

  HashTable將鍵映射到相應的值。任何非 null 對象均可以用做鍵或值。線程

HashMap與HashTable:

  HashTable 繼承了Dictionary,是線程安全的,鍵值對中不能出現 null.code

       HashMap 實現了 Map接口,是HashTable的輕量級實現(非線程安全的實現),即多個線程訪問HashMap時須要爲其準備外同步,且Hashmap的鍵、值能夠爲空。htm

        遍歷Map有兩種方式:keySet(效率低)、entrySet(效率高),兩種方式都須要建立Iterator迭代器對象,但建立方式有所不一樣。對象

        keySet():返回值是Map中的key值的集合blog

        entrySet():返回值是set集合, 集合類型爲Map.Entry繼承

Demo:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

public class Test1 {
	public static void main(String[] args){
		ArrayList<Double> arr1 = new ArrayList<Double>();
		arr1.add(1.23);
		arr1.add(2.21);
		arr1.add(4.59); // 迭代器方式遍歷list
		Iterator<Double> iterator = arr1.iterator();
		while(iterator.hasNext()){
			System.out.print(iterator.next()+" ");
		}
		System.out.println(); 
		System.out.println("----------分界線---------");
		Double arr2[] = arr1.toArray(new Double[0]); // list轉數組方式遍歷list
		for(int i=0;i<arr2.length;i++){
			System.out.print(arr2[i]+" ");
		}
		System.out.println();
		System.out.println("----------分界線---------");
		HashSet<Double> set1 = new HashSet<Double>();
		set1.add(2.25);
		set1.add(3.78);
		set1.add(9.54);  // 迭代器方式遍歷set
		Iterator<Double> iterator1 = set1.iterator();
		while(iterator1.hasNext()){
			System.out.print(iterator1.next()+" ");
		}
		System.out.println();
		System.out.println("----------分界線---------"); // set轉數組方式遍歷set
		Double arr3[] = set1.toArray(new Double[0]);
		for(int i=0;i<arr3.length;i++){
			System.out.print(arr3[i]+" ");
		}
		System.out.println();
		System.out.println("----------分界線---------");
		HashMap<Character,Integer> map1 = new HashMap<Character,Integer>();
		HashMap<String,Integer> map2 = new HashMap<String,Integer>();
		map1.put('d', 5);
		map1.put('t', 9);
		map1.put('p',13);
		map2.put(Character.toString('a'), 1);
		map2.put("aa", 2);
		map2.put("aaa", 3); // 迭代器中的entrySet方式遍歷HashMap
		Iterator<Entry<Character,Integer>> iterator3 = map1.entrySet().iterator();
		while(iterator3.hasNext()){
			Map.Entry<Character, Integer> entry = iterator3.next();
			System.out.print(entry.getKey()+":"+entry.getValue()+"  ");
		}
		System.out.println();
		System.out.println("----------分界線---------"); // 迭代器中的KeySet方式遍歷HashMap
		Iterator<String> iterator4 = map2.keySet().iterator();
		while(iterator4.hasNext()){
			String s = iterator4.next();
			System.out.print(s+":"+map2.get(s)+"  ");
		}
		System.out.println();
		System.out.println("----------分界線---------");
		System.out.println(map2.containsKey("aa"));
		System.out.println(map2.containsValue(2));
	}
}

 運行結果:

1.23 2.21 4.59 ----------分界線---------1.23 2.21 4.59 ----------分界線---------2.25 3.78 9.54 ----------分界線---------2.25 3.78 9.54 ----------分界線---------p:13  d:5  t:9  ----------分界線---------aa:2  aaa:3  a:1  ----------分界線---------truetrue

相關文章
相關標籤/搜索