Java進階篇(三)——Java集合類

  集合能夠看做一個容器,集合中的對象能夠很容易存放到集合中,也很容易將其從集合中取出來,還能夠按必定的順序擺放。Java中提供了不一樣的集合類,這些類具備不一樣的存儲對象的方式,並提供了相應的方法方便用戶對集合進行遍歷。html

  集合的長度是可變的,用來存放對象的引用。常見的集合類有List集合、Set集合、Map集合。java

一.集合類接口

  如下接口的經常使用方法有不少,這裏只提其中重要的幾個方法,其它方法在使用時可參照API。數組

  1. List接口

  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

  2. Set接口

  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集合的順序並不相同。

  3. Map接口

  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。

2、集合類接口的實現類

  上面在定義一個接口時,都有new一個實現類,下面介紹幾種經常使用的實現類。

  1. List接口的實現類

  List接口的實現類經常使用的有ArrayList和LinkedList,這兩個實現類在上面的例子中已經出現過了。

  ArrayList類實現了可變的數組,能夠根據索引位置對集合進行快速的隨機訪問。LinkedList類採用鏈表結構保存對象,便於向集合中插入和刪除對象。對於線性結構和鏈式結構不清楚的朋友能夠看我以前的博客「數據的存儲結構」,連接:http://www.cnblogs.com/adamjwh/p/5829604.html,也能夠自行查閱資料。

  分別經過ArrayList和LinkedList類實例化List集合以下:

List list1 = new ArrayList();
List list2 = new LinkedList();

  2. Set接口的實現類

  Set接口的實現類經常使用的有HashSet和TreeSet,實現以下:

Set<String> set1 = new HashSet<String>();
Set<String> set2 = new TreeSet<String>();

  3. Map接口的實現類

  Map接口的實現類經常使用的有HashMap和TreeMap,建議使用HashMap(效率相對較高)。

  實現以下:

Map map = new HashMap();
Map map = new TreeMap();

 3、迭代器

  迭代器是利用Iterator接口建立的,在上面已經出現過了。以下是上方Set接口中的代碼:

Iterator<String> it = set.iterator();    // 建立一個迭代器
while(it.hasNext()) {
    System.out.print(it.next() + " ");
}    

  上述代碼用Iterator接口和iterator()方法建立了一個迭代器;用while循環遍歷這個集合,hasNext()方法是循環判斷條件,即若是有元素能夠迭代,返回true,循環繼續執行;next()方法是返回迭代的下一個元素。除了這兩個方法外,Iterator接口還有一個方法是remove(),用於從迭代器指向的collection中移除迭代器返回的最後一個元素。

相關文章
相關標籤/搜索