1. 程式人生 > >基於JavaSE階段下的集合類匯總

基於JavaSE階段下的集合類匯總

兩種方法 print 完全 索引 style lis list集合 包含 簡化

一.數組與集合的區別

  數組和集合都是用來存儲對象的容器,但是,數組只能儲存基本數據類型的對象,且長度不可變;而集合是儲存引用數據類型的對象,且長度可變,所以,在不知對象數量的具體數值時一般用集合來存儲。

二.javaSE階段下的層次圖

  技術分享圖片

  從層次圖可以來看,集合類是以接口來實現的,其中<E>和<K,V>為泛型,簡單來說,泛型就是所引用的對象類型,集合主要分為單列集合和雙列集合,Iterator叠代器只是集合的運用,從而實現了Iterator接口,用於遍歷集合中元素的接口,主要運用無序集合跟增強for循環聯合使用。

三.Iterator叠代器和增強for循環

  1.Iterator接口主要包含三種方法:①.hasNext();//是否還有下一個元素;②.next();//返回下一個元素;③.remove();//刪除當前元素。

  2.增強for循環:

  ①.從jdk1.5出現的新特性,其作用為簡化叠代器的書寫格式(註:增強for循環的底層還是使用了叠代器遍歷。),用於實現了Iterable接口的對象或者是數組對象;

  ②.增強for循環的格式,for(數據類型 變量名 :遍歷的目標){ }

  ③.註意的事項:

  • 增強for循環底層也是使用了叠代器獲取的,只不過獲取叠代器由jvm完成,不需要我們獲取叠代器而已,所以在使用增強for循環變量元素的過程中不準使用集合對象對集合的元素個數進行修改;
  • 增強for循環變量集合的元素時,不能調用叠代器的remove方法來刪除元素;
  • 增強for循環一定要有遍歷的目標。

四.單列集合Collection以及Collections工具類

  1.List(有序,有索引,可重復)

   List存放的對象可以按照一定的順序排列,故查詢速度快,但是在添加或者刪除時,會使得後面數據的相應的移動,故而將會變得緩慢,常見的List集合有ArrayList集合等。

  2.Set(無序,無索引,不可重復)

   Set跟List集合是相反的,因而是無序,故查詢較慢,相反則增刪較快,常見的Set集合有HashSet集合等。

  3.Collections工具類

   Collections工具類只是在使用Collection接口時,所有的子類或者子接口都可以繼承此工具類,使用裏面的方法來簡化實現方法的作用。

五.雙列集合Map

  1.Map及其HashMap,HashTable

   Map和HashMap的用法一致,二者都是無序,不可重復的,其鍵(K)不能重復,值(V)可以重復,根據鍵得到值;HashMap是最常用的Map,根據鍵的HashCode值存儲數據,具有很快的訪問速度,遍歷時,取得數據的順序是完全隨機的。因為鍵對象不可以重復,所以HashMap最多只允許一條記錄的鍵為Null,允許多條記錄的值為Null,是非同步的;Hashtable與HashMap類似,是HashMap的線程安全版,它支持線程的同步,即任一時刻只有一個線程能寫HashTable,從而也導致了HashTale在寫入時會比較慢,它繼承自Dictionary類,不同的是它不允許記錄的鍵或者值為Null,同時效率較低。

  2.Map的兩種遍歷方式

   ①.keySet()

   將Map中所有的鍵存入到set集合中。因為set具備叠代器。所有可以叠代方式取出所有的鍵,再根據get方法。獲取每一個鍵對應的值。 keySet():叠代後只能通過get()取key 。
取到的結果會亂序,是因為取得數據行主鍵的時候,使用了HashMap.keySet()方法,而這個方法返回的Set結果,裏面的數據是亂序排放的。
典型用法如下:
  Map<String,String> map = new HashMap<String,String>();
  map.put("key1","value1");
  map.put("key2","value2");
  map.put("key3","value3");
  Set<String> keys = map.keySet();//先獲取Map集合的所有鍵的Set集合,keySet()
  Iterator<String> it =keys.iterator();
  //獲取叠代器
  while(it.hasNext()){
    String key = it.next();

    String value = map.get(key);

    //打印key和value值
    System.out.println(key+"="+value);
  }

  ②.entrySet()

   Set<Map.Entry<K,V>> entrySet(),返回此映射中包含的映射關系的 Set 視圖。就是把(key,value)作為一個整體一對一對地存放到Set集合當中的。Map.Entry表示映射關系。entrySet():叠代後可以entry.getKey(),entry.getValue()兩種方法來取key和value。返回的是Entry接口,效率較高
典型用法如下:
Map<String,String> map = new HashMap<String,String>();
  map.put("key1","value1");
  map.put("key2","value2");
  map.put("key3","value3");
  Set<Map.Entry<String,String>>entrys = map.entrySet();//先獲取Map集合的所有鍵的Set集合,entrySet()
  Iterator<Map.Entry<String,String>> it =entrys.iterator();
  //獲取叠代器
  while(it.hasNext()){

  Map.Entry<String,String> entry = it.next();

    String key =entry.getKey();

    String value = entry.getValue();
   System.out.println("鍵:"+key + ",值:" + value);
  }

基於JavaSE階段下的集合類匯總