數組 、HashMap 與ArrayList 區別

1、 總體訴說:sql

1.ArrayList是不固定的,好比用sql查詢數據庫,不知道有多少記錄返回,用Arraylist。 數據庫

2.HashMap/Hashtable 和 Vector/ArrayList 都是放一組對象,一個是用key object來定位element, 另外一個是用index定位element. api

3.ArrayList 是一維的,HashTable、HashMap都是二維的。 數組

4.HashMap的同步問題可經過Collections的一個靜態方法獲得解決:Map Collections.synchronizedMap(Map m);使用以下:Map map=Collections.synchronizedMap(new HashMap())。這個方法返回一個同步的Map,這個Map封裝了底層的HashMap的全部方法,使得底層的HashMap即便是在多線程的環境中也是安全的。 安全

5.在HashMap中,null能夠做爲鍵,這樣的鍵只有一個;能夠有一個或多個鍵所對應的值爲null。當get()方法返回null值時,便可以表示HashMap中沒有該鍵,也能夠表示該鍵所對應的值爲null。所以,在HashMap中不能由get()方法來判斷HashMap中是否存在某個鍵,而應該用containsKey()方法來判斷多線程

2、從代碼級別說明spa

 2.1. 可儲存的值線程

   //數組 => 可存儲基礎數據類型或者對象對象

  1. int[] data = {1,2,3,4,5};  
  2. String[] name = {"Mike","Tom","Jessie"};

//ArrayList => 只可存儲對象ci

  1. ArrayList nameList = new ArrayList();  
  2. nameList.add(new String("Ada"));  

 ※可是如下代碼編譯器不會報錯:

  1. ArrayList numberList = new ArrayList();  
  2. numberList.add(100);  //雖然看上去是存的基礎數據類型,但實際上被強制轉換爲Object對象 

 //HashMap => 只可存儲成對的對象

  1. HashMap capitalCityMap = new HashMap();  
  2. capitalCityMap.put("China","Beijing");

 ※可是如下代碼編譯器不會報錯:

  1. HashMap capitalCityMap2 = new HashMap();  
  2. capitalCityMap2.put(1,"Beijing"); //雖然看上去是存的基礎數據類型,但實際上被強制轉換爲Object對象  

2.二、如何取得元素個數

//數組

  1. int[] data = {1,2,3,4,5};  
  2. int size1 = data.length;    

 //ArrayList

  1. ArrayList nameList = new ArrayList();  
  2. nameList.add(new String("Ada"));  
  3. int size2 = nameList.size();  

//HashMap

  1. HashMap capitalCityMap = new HashMap();  
  2. capitalCityMap.put("China","Beijing");  
  3. int size3 = capitalCityMap.size();  

 2.3 是否容許重複值

//數組

  1. int[] data = {1,1,1,1,1};  //OK    

  //ArrayList

  1. ArrayList nameList = new ArrayList();  
  2. nameList.add(new String("Ada"));  
  3. nameList.add(new String("Ada")); //OK   

 //HashMap

  1. HashMap capitalCityMap = new HashMap();  
  2. capitalCityMap.put("China","Beijing");  
  3. capitalCityMap.put("China","Shanghai");//OK,可是"China"這個Key關聯的Value就會被覆蓋,  
  4.                                            //也就是"China"對應的對象再也不是"Beijing",而是"Shanghai"   

2.4 如何遍歷

 //數組

  1. int[] data = {1,1,1,1,1};  //OK  
  2. for(int i=0;i<data.length;i++){  
  3.     System.out.println(data[i]);//經過數組下標進行遍歷  
  4. }  

 //ArrayList

  1. ArrayList nameList = new ArrayList();  
  2. nameList.add(new String("Ada"));  
  3. Iterator iter = nameList.iterator();  
  4. while(iter.hasNext()){  
  5.     String name = (String)iter.next();  
  6.     System.out.println(name);//經過迭代器Iterator進行遍歷  
  7. }  

 //或者

  1. for(int i=0;i<nameList.size();i++){  
  2.     System.out.println(nameList.get(i));  
  3. }  

 // HashMap

  1. HashMap capitalCityMap = new HashMap();  
  2. capitalCityMap.put("China","Beijing");  
  3. Iterator iter2 = capitalCityMap.entrySet().iterator();  
  4. while(iter2.hasNext()){  
  5.     Map.Entry cityAndCountry = (Map.Entry)iter2.next();  
  6.     String country = (String)cityAndCountry.getKey();  
  7.     String city = (String)cityAndCountry.getValue();  
  8.     System.out.println(country + "'s capital city is " + city);//經過迭代器Iterator進行遍歷  
  9. }  
相關文章
相關標籤/搜索