集合能夠看做一個容器,集合中的對象能夠很容易存放到集合中,也很容易將其從集合中取出來,還能夠按必定的順序擺放。Java中提供了不一樣的集合類,這些類具備不一樣的存儲對象的方式,並提供了相應的方法方便用戶對集合進行遍歷。html
集合的長度是可變的,用來存放對象的引用。常見的集合類有List集合、Set集合、Map集合。java
如下接口的經常使用方法有不少,這裏只提其中重要的幾個方法,其它方法在使用時可參照API。數組
List是列表類型,以線性方式存儲對象,自身的方法都與索引有關,個別經常使用方法以下。spa
方法 | 返回值 | 功能描述 |
add(int index, Object obj) | void | 用來向集合中的指定索引位置添加對象,集合的索引位置從0開始,其餘對象的索引位置相對向後移一位 |
set(int index, E element) | Object | 用指定元素替換列表中指定位置的元素,返回之前在指定位置的元素 |
indexOf(Object obj) | int | 返回列表中對象第一次出現的索引位置,若是集合中不包含該元素則返回-1 |
lastIndexOf(Object obj) | int | 返回列表中對象最後一次出現的索引位置,若是集合彙總不包含該元素則返回-1 |
listIterator() | ListIterator | 用來得到一個包含全部對象的ListIterator迭代器 |
下面舉一個實例,看看如何建立並添加修改集合元素。3d
1 import java.util.Iterator; 2 import java.util.LinkedList; 3 import java.util.List; 4 5 public class CollectionDemoList { 6 7 public static void main(String[] args) { 8 String aString = "A", bString = "B", cString = "C", dString = "D", eString = "E"; 9 10 List<String> list = new LinkedList<>(); // 建立list集合對象 11 list.add(aString); // 向集合中添加元素 12 list.add(bString); 13 list.add(eString); 14 // 輸出語句,用迭代器 15 Iterator<String> iter = list.iterator(); // 建立集合迭代器 16 while(iter.hasNext()) { // 遍歷集合中的元素 17 System.out.print(iter.next() + " "); 18 } 19 20 System.out.println(); // 換行 21 list.set(1, cString); // 將索引位置1的對象修改成對象bString 22 Iterator<String> it = list.iterator(); 23 while(it.hasNext()) { 24 System.out.print(it.next() + " "); 25 } 26 } 27 28 }
上述代碼中,add()方法用於向集合中添加元素,set()方法用於修改集合中的元素,迭代器用於遍歷集合中的元素並輸出(會在下面的內容中涉及)。運行結果以下:code
其中建立List集合對象時,「<>」中是集合彙總元素的類型,如上方的String表示集合中的元素由String字符串構成。由於List是一個接口,因此new的是接口的實現類,在Eclipse中光標放在List上按Ctrl+T就能夠看見List接口的全部實現類了。htm
Set接口經常使用方法以下。對象
方法 | 返回值 | 功能描述 |
add(Object obj) | boolean | 若集合中尚存在未指定的元素,則添加此元素 |
addAll(Collection col) | boolean | 將參數集合中全部元素添加到集合的尾部 |
remove(Object obj) | boolean | 將指定的參數對象移除 |
clear() | void | 移除此Set中的全部元素 |
iterator() | Iterator | 返回此Set中的元素上進行迭代的迭代器 |
size() | int | 返回此Set集合中的全部元素數 |
isEmpty() | boolean | 若是Set不包含元素,則返回true |
下面看一個例子,用addAll()方法把List集合對象存入到Set集合中併除掉重複值。blog
1 import java.util.ArrayList; 2 import java.util.HashSet; 3 import java.util.Iterator; 4 import java.util.List; 5 import java.util.Set; 6 7 public class CollectionDemoSet { 8 9 public static void main(String[] args) { 10 List<String> list = new ArrayList<>(); // 建立List集合對象 11 list.add("dog"); 12 list.add("cat"); 13 list.add("fish"); 14 list.add("cat"); //重複值 15 16 Set<String> set = new HashSet<>(); // 建立List對象集合 17 set.addAll(list); // 將List集合對象添加到Set集合中 18 Iterator<String> it = set.iterator(); 19 while(it.hasNext()) { 20 System.out.print(it.next() + " "); 21 } 22 } 23 24 }
同理,建立Set對象集合時,Set是一個接口,new的是接口的實現類。運行結果以下:索引
因爲Set集合中的對象是無序的,遍歷Set集合的結果與插入Set集合的順序並不相同。
Map接口提供了將鍵映射到值的對象,一個映射不能包含重複的鍵,每一個鍵最多隻能映射一個值。Map接口一樣提供了clear()、isEmpty()、size()等方法,還有一些經常使用方法以下。
方法 | 返回值 | 功能描述 |
put(key k, value v) | Object | 向集合中添加指定的key與value的映射關係 |
get(Object key) | boolean | 若是存在指定的鍵對象,則返回該對象對應的值,不然返回null |
values() | Collection | 返回該集合中全部值對象造成的Collection集合 |
下面看一個例子。
1 import java.util.HashMap; 2 import java.util.Map; 3 4 public class MapDemo { 5 6 public static void main(String[] args) { 7 Map<String, String> map = new HashMap<>(); // 建立Map集合 8 map.put("1", "dog"); 9 map.put("2", "cat"); 10 map.put("3", "fish"); 11 for(int i=1; i<=3; i++) { 12 System.out.println("第" + i + "個元素是:" + map.get("" + i + "")); 13 } 14 } 15 16 }
具體寫法參照上例便可。運行結果以下:
建立Map集合時,Map接口的「<>」中含有兩個類型,分別對應其key與value。
上面在定義一個接口時,都有new一個實現類,下面介紹幾種經常使用的實現類。
List接口的實現類經常使用的有ArrayList和LinkedList,這兩個實現類在上面的例子中已經出現過了。
ArrayList類實現了可變的數組,能夠根據索引位置對集合進行快速的隨機訪問。LinkedList類採用鏈表結構保存對象,便於向集合中插入和刪除對象。對於線性結構和鏈式結構不清楚的朋友能夠看我以前的博客「數據的存儲結構」,連接:http://www.cnblogs.com/adamjwh/p/5829604.html,也能夠自行查閱資料。
分別經過ArrayList和LinkedList類實例化List集合以下:
List list1 = new ArrayList(); List list2 = new LinkedList();
Set接口的實現類經常使用的有HashSet和TreeSet,實現以下:
Set<String> set1 = new HashSet<String>(); Set<String> set2 = new TreeSet<String>();
Map接口的實現類經常使用的有HashMap和TreeMap,建議使用HashMap(效率相對較高)。
實現以下:
Map map = new HashMap(); Map map = new TreeMap();
迭代器是利用Iterator接口建立的,在上面已經出現過了。以下是上方Set接口中的代碼:
Iterator<String> it = set.iterator(); // 建立一個迭代器 while(it.hasNext()) { System.out.print(it.next() + " "); }
上述代碼用Iterator接口和iterator()方法建立了一個迭代器;用while循環遍歷這個集合,hasNext()方法是循環判斷條件,即若是有元素能夠迭代,返回true,循環繼續執行;next()方法是返回迭代的下一個元素。除了這兩個方法外,Iterator接口還有一個方法是remove(),用於從迭代器指向的collection中移除迭代器返回的最後一個元素。