1. 程式人生 > >王如霜 廊坊師範學院資訊科技提高班十三期

王如霜 廊坊師範學院資訊科技提高班十三期

在開始講集合之前,我們先說一下陣列和集合的區別:

  • 陣列是大小固定的;同一個陣列只能存放型別一樣的資料(基本型別,如int/引用型別);可建立可讀並可寫的陣列,但不能建立只讀的;操作快
  • 集合大小事可變的;同一個集合只能存放引用型別的的資料(不能存放基本資料型別,但能儲存基本型別的包裝類,如Integer);可建立只讀的的集合;功能多
  • 容器類僅能持有物件引用(指向物件的指標),而不是將物件資訊copy一份至數列某位置
  • 一旦將物件置入容器內,便損失了該物件的型別資訊

以下這張圖表明瞭集合的結構,集合的父介面為Collection:

這裡寫圖片描述

以下表格表明了3種集合的區別:

Map List Set
是否可重複
是否有序 HashMap 無序,TreeMap 有序
是否允許為null
TreeMap,TreeSet,Tree*都是有序的
Map
  • 沒有繼承於Collection介面
  • 是一種對映
  • 是一種把鍵物件和值物件對映的集合,它的每一個元素都包含一對鍵物件和值物件。

主要的兩個實現類:

1.HashMap

  • HashMap:用到了雜湊碼的演算法,以便快速查詢一個鍵,無法估測元素存放的位置;

  • HashMap使用了特殊的值,稱為“雜湊碼”(hash code),來取代對鍵的緩慢搜尋。“雜湊碼”是“相對唯一”用以代表物件的int值,它是通過將該物件的某些資訊進行轉換而生成的。所有Java物件都能產生雜湊碼,因為hashCode()是定義在基類Object中的方法,HashMap就是使用物件的hashCode()進行快速查詢的。此方法能夠顯著提高效能

2.TreeMap

  • TreeMap:用到了二叉樹演算法,根據鍵按序存放,是可以估測元素存放的位置;
  • 基於紅黑樹資料結構的實現。檢視“鍵”或“鍵值對”時,它們會被排序(次序由Comparabel或Comparator決定)。TreeMap的特點在於,你得到的結果是經過排序的。TreeMap是唯一的帶有subMap()方法的Map,它可以返回一個子樹。
List
  • 繼承於Collection介面
  • 是一種列表
  • 是其元素以線性方式儲存,集合中可以存放重複物件,最大特點是元素有序
  • 以Array為基礎

主要的兩個實現類:

1.ArrayList

  • 長度可以改變的陣列結構。儲存方式類似與陣列,所以訪問速度快,可對元素進行隨機的訪問,向ArrayList()中插入與刪除元素的速度慢
  • 適合查

2.LinkedList

  • 連結串列資料結構。插入和刪除速度快(因為只需要改變元素存放的下一個元素地址),訪問速度慢(因為通過連結遞迴地往下找)
  • 適合增刪
Set
  • 繼承於Collection介面
  • 最簡單的一種集合
  • 集合中的物件不按特定的方式排序
  • 存放的是物件的引用,沒有重複物件
  • 以HashMap為基礎,儲存方式是把HashMap中的Key作為Set的對應儲存項
  • 擁有和Collection一模一樣的介面
Set set=new HashSet();  
 String s1=new String("hello");  
 String s2=s1;  
 String s3=new String("world");  
 set.add(s1);  
 set.add(s2);  
 set.add(s3);  
 System.out.println(set.size());//列印集合中物件的數目 為 2

主要的兩個實現類:

1.HashSet

  • 按照雜湊演算法來存取集合中的物件,存取速度比較快
  • 放到HashSet中的物件需要實現hashCode()方法

2.TreeSet

  • 將放入其中的元素按序存放,這就要求你放入其中的物件是可排序的,這就用到了集合框架提供的另外兩個實用類Comparable和Comparator。一個類是可排序的,它就應該實現Comparable介面。有時多個類具有相同的排序演算法,那就不需要在每分別重複定義相同的排序演算法,只要實現Comparator介面即可

【總結】

  • 最常用的是ArrayList,HashSet,HashMap,Array
  • Collection和Map的區別:Collection型別者,每個位置只有一個元素。 Map型別者,持有 key-value pair,像個小型資料庫
  • 集合框架中還有兩個很實用的公用類:Collections和Arrays。Collections提供了對一個Collection容器進行諸如排序、複製、查詢和填充等一些非常有用的方法,Arrays則是對一個數組進行類似的操作