在JDK API中專門設計了一組類,這組類的功能就是實現各類各樣方式的數據存儲,這樣一組專門用來存儲其它對象的類,通常被稱爲對象容器類,簡稱容器類,這組類和接口的設計結構也被統稱爲集合框架(Collection Framework)。 這組類和接口都包含在java.util包中。
爲了使整個集合框架中的類便於使用,在設計集合框架時大量的使用接口,實際實現的功能類實現對應的接口,這樣能夠保證各個集合類的使用方式保持統一。
集合框架中的類就分紅了三大類: 一、List系列 該系列中的類按照索引值來操做數據,容許存放重複的元素。 二、Set系列 該系列中的類按照索引值來操做數據,不容許存放重複的元素。 三、Map系列 該系列中的類按照名稱來操做數據,鍵(key)不容許重複,值(value)能夠重複,一個鍵對應一個惟一的值。
List系列的類均實現List接口,大部分的類都以List做爲類名的後綴,也有部分該體系中的類命名比較特殊。
該系列中的類,比較常見的有ArrayList和LinkedList兩個。其中ArrayList是以數組爲基礎實現的List,而LinkedList則是以鏈表爲基礎實現的List,ArrayList擁有數組的優勢,而LinkedList擁有鏈表的優勢。
因爲該體系中的類均實現List接口,因此在這些類的內部,相同的功能方法聲明是保持一致的,下面進行一一介紹:
a、add方法
boolean add(Object o)
該方法的做用是追加對象o到已有容器的末尾。
另一個add方法:
void add(int index, Object element)
該方法的做用是將對象element插入到容器中索引值爲index的位置,原來位於該位置的對象以及後續的內容將依次向後移動。java
b、addAll方法
boolean addAll(Collection c)
該方法的做用是將容器對象c中的每一個元素依次添加到當前容器的末尾。數組
另一個addAll方法:
boolean addAll(int index, Collection c)
該方法的做用是將容器對象c中的第一個元素插入到當前容器中索引值爲index的位置,第二個元素插入到當前容器中索引值爲index+1的位置,依次類推而當前容器中原來位於index以及index索引值之後的元素則依次向後移動。數據結構
c、get方法
Object get(int index)
該方法的做用是返回當前容器對象中索引值爲index的元素的內容。框架
d、indexOf方法
int indexOf(Object o)
該方法的做用是查找當前容器中是否存在對象o,若是存在則返回該對象第一次出現位置的索引值,若是不存在則返回-1。
另一個方法lastIndexOf則是從末尾向前查找,返回從末尾向前第一次出現位置的索引值,若是不存在則返回-1。spa
e、remove方法
Object remove(int index)
該方法的做用是刪除索引值爲index的對象的內容,若是刪除成功則返回被刪除對象的內容。設計
另一個remove方法:
boolean remove(Object o)
該方法的做用是刪除對象內容爲o的元素,若是相同的對象有多個,則只刪除索引值小的對象。若是刪除成功則返回true,不然
返回false。
不管使用哪個remove方法,類內部都自動移動將被刪除位置後續的全部元素向前移動,保證索引值的連續性。code
f、set方法
Object set(int index, Object element)
該方法的做用是修改索引值爲index的內容,將原來的內容修改爲對象element的內容。對象
g、size方法
int size()
該方法的做用是返回當前容器中已經存儲的有效元素的個數。blog
h、toArray方法
Object[] toArray()
該方法的做用是將當前容器中的元素按照順序轉換成一個Object數組。索引
/** * 以ArrayList類爲基礎演示List系列類的基本使用 */ public class ArrayListUse { public static void main(String[] args) { //容器對象的初始化 List list = new ArrayList(); //添加數據 list.add("1"); list.add("2"); list.add("3"); list.add("1"); list.add("1"); //插入數據 list.add(1,"12"); //修改數據 list.set(2, "a"); //刪除數據 list.remove("1"); //遍歷 int size = list.size(); //得到有效個數 //循環有效索引值 for(int i = 0;i < size;i++){ System.out.println((String)list.get(i)); } } }
該程序的運行結果爲: 12 a 3 1 1
二、Set(惟1、無序)
Set系列中的類都實現了Set接口,該系列中的類均以Set做爲類名的後綴。該系列中的容器類,不容許存儲重複的元素。也就是當容器中已經存儲一個相同的元素時,沒法實現添加一個徹底相同的元素,也沒法將已有的元素修改爲和其它元素相同。 Set系列中類的這些特色,使得在某些特殊場合的使用比較適合。 該系列中常見的類有: 一、CopyOnWriteArraySet 以數組爲基礎實現的Set類。 二、HashSet 以哈希表爲基礎實現的Set類。 三、LinkedHashSet 以鏈表爲基礎實現的Set類。 四、TreeSet 以樹爲基礎實現的Set類。
以不一樣的數據結構類型實現的Set類,擁有不一樣數據結構帶來的特性,在實際使用時,根據邏輯的須要選擇合適的Set類進行使用。 Set系列中的類的方法和List系列中的類的方法要比List系列中少不少,例如不支持插入和修改,並且對於Set系列中元素的遍歷也須要轉換爲專門的Iterator(迭代器)對象才能夠進行遍歷,遍歷時順序和Set中存儲的順序會有所不一樣。 下面是以HashSet類爲基礎實現的示例代碼,代碼以下:
import java.util.*; /** * 以HashSet爲基礎演示Set系列類的基本使用 */ public class HashSetUse { public static void main(String[] args) { //容器對象的初始化 Set set = new HashSet(); //添加元素 set.add("1"); set.add("2"); set.add("3"); set.add("1"); set.add("1"); //刪除數據 //set.remove("1"); //遍歷 Iterator iterator = set.iterator(); while(iterator.hasNext()){ System.out.println((String)iterator.next()); } } }
該程序的運行結果爲: 3 2 1
list用add()加進去後是有前後順序的,順序是必定的,set恰好沒有順序,簡單來講是亂的
ArrayList 把1,2,3,4前後加進去,遍歷出來就是1234,Set可不必定喲,可能就是4213或1243等等
三、Map(鍵值對、鍵惟一)
Map系列中的類都實現了Map接口,該系列中的部分類以Map做爲類名的後綴。該系列容器類存儲元素的方式和以上兩種徹底不一樣。 Map提供了一種使用「鍵:值」這樣的名稱和數值對存儲數據的方法,在該存儲方式中,名稱不能夠重複,而不一樣的名稱中能夠存儲相同的數值。具體這種存儲的格式將在示例代碼中進行實現。 在這種存儲結構中,任何不爲null的對象均可以做爲一個鍵(key)來做爲存儲的值(value)的標識,使用這種形式更利於存儲比較零散的數據,也方便數據的查找和得到。Map類中存儲的數據沒有索引值,系統會以必定的形式索引存儲的名稱,從而提升讀取數據時的速度。
該系列中常見的類有: 一、HashMap 以Hash(哈希表)爲基礎實現的Map類。 二、LinkedHashMap 以鏈表和Hash(哈希表)爲基礎實現的Map類。 三、TreeMap 以樹爲基礎實現的Map類。 和上面的結構相似,以不一樣的數據結構實現的Map類,擁有不一樣數據結構的特色,在實際的項目中使用時,根據須要選擇合適的便可。
該系列的類中常見的方法以下: a、get方法 Object get(Object key) 該方法的做用是得到當前容器中名稱爲key的結構對應的值。
b、keySet方法 Set keySet() 該方法的做用是返回當前容器中全部的名稱,將全部的名稱以Set的形式返回。使用這個方法能夠實現對於Map中全部元素的遍歷。
c、put方法 Object put(Object key, Object value) 該方法的做用是將值value以名稱key的形式存儲到容器中。
d、putAll方法 void putAll(Map t) 該方法的做用是將Map對象t中的全部數據按照原來的格式存儲到當前容器類中,至關於合併兩個Map容器對象。
e、remove方法 Object remove(Object key) 該方法的做用是刪除容器中名稱爲key的值。
f、size方法 int size() 該方法的做用是返回當前日期中存儲的名稱:值數據的組數。
g、values方法 Collection values() 該方法的做用是返回當前容器全部的值組成的集合,以Collection對象的形式返回。
下面是一個簡單的示例,在該示例中演示Map系列類的基本使用,代碼以下:
import java.util.*; /** * 以HashMap爲基礎演示Map系列中類的使用 */ public class HashMapUse { public static void main(String[] args) { //容器對象的初始化 Map map = new HashMap(); //存儲數據 map.put("蘋果", "2.5"); map.put("桔子", "2.5"); map.put("香蕉", "3"); map.put("菠蘿", "2"); //刪除元素 map.remove("桔子"); //修改元素的值 map.put("菠蘿", "5"); //得到元素個數 int size = map.size(); System.out.println("個數是:" + size); //遍歷Map Set set = map.keySet(); Iterator iterator = set.iterator(); while(iterator.hasNext()){ //得到名稱 String name = (String)iterator.next(); //得到數值 String value = (String)map.get(name); //顯示到控制檯 System.out.println(name + ":" + value); } } }
該程序的運行結果爲:
個數是:3香蕉:3菠蘿:5蘋果:2.5