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


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

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

一.集合類接口

  以下接口的常用方法有很多,這里只提其中重要的幾個方法,其它方法在使用時可參照API。

  1. List接口

  List是列表類型,以線性方式存儲對象,自身的方法都與索引有關,個別常用方法如下。

方法 返回值 功能描述
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迭代器

  下面舉一個實例,看看如何創建並添加修改集合元素。

 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()方法用於修改集合中的元素,迭代器用於遍歷集合中的元素並輸出(會在下面的內容中涉及)。運行結果如下:

  

  其中創建List集合對象時,“<>”中是集合匯總元素的類型,如上方的String表示集合中的元素由String字符串構成。因為List是一個接口,所以new的是接口的實現類,在Eclipse中光標放在List上按Ctrl+T就可以看見List接口的所有實現類了。

  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集合中並除掉重復值。

 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。

二、集合類接口的實現類

  上面在定義一個接口時,都有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();

 三、迭代器

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

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM