標籤:java 集合 collection
java集合類主要由兩個介面派生出來:Collection和Map,者兩個類是java集合架構的根本介面,其餘的集合都是這兩個集合的子類,這篇部落客要講Collection介面及其體系中包含的set,list,queue 等集合。下面依次就這些內容進行講解。
一.Collection
1.Collection是set,list,queue介面的父介面,Collection中定義的方法對set,list,queue也是適用的。下面的代碼示範了Collection的基本操作,從下面的代碼中可以看到,集合的操作有針對當個元素和一個集合的,這兩種操作的函數名很是類似,只是對於操作對象是集合的,函數名一般加一個All。
package lkl;import java.util.ArrayList;import java.util.Collection;import java.util.HashSet;public class CollectionTest { public static void main(String[] args){ Collection c = new ArrayList(); Collection d= new HashSet(); ///add()方法可以向集合中添加一個元素 ///addAll()方法可以添加一個集合 c.add("lkl"); d.add("test"); d.add("java"); c.addAll(d); ///isEmpty()方法用來測試集合是否為空白 System.out.println("集合是否為空白?"+c.isEmpty()); ///remove()可以將一個元素從集合中移除 /// removeAll可以將某個集合的全部元素從當前集合移除 c.remove("lkl"); c.remove(d); System.out.println("集合是否為空白?"+c.isEmpty()); c.add("lkl"); c.add(d); ///contains()方法可以用來判斷集合是否包含某個元素 ///containsAll可以用來判斷集合是否包含另一個集合中所有的元素 System.out.println("集合c是否包含“lkl”?"+c.contains("lkl")); System.out.println("集合c是否d中的所有元素?"+c.containsAll(d)); ///retainAll()方法求當前集合和傳入集合的交集 c.retainAll(d); System.out.println(c); c.add("lkl"); ///size()方法返回集合中元素的個數 System.out.println("集合c中的元素個數為:"+c.size()); /* ///toArray將集合轉換成一個數組,集合元素成為數組元素 String[] str =(String[])c.toArray();*/ ///clear()將集合清空 c.clear(); System.out.println("集合是否為空白?"+c.isEmpty()); }}
2.Collection集合的遍曆
我們一般使用Iterator來遍曆集合。Iterator也是java集合架構的成員,其主要用於遍曆Collection集合;它提供了以下三個方法:
bool hasNext():如果集合的元素還沒被遍曆玩,則返回true
Object next(): 返回集合中的下一個元素
void remove(): 刪除集合裡上次next()方法返回的元素
有三個需要注意的地方:
1.從集合中返回的元素是Object類型的,所以我們需要手動進行類型轉換。
2.每次返回的是集合中元素的值而不是元素本身,所以我們不能通過改變返回的值而改變集合中元素本身。
3.我們不能在迭代訪問時改變集合中元素(但可以調用Iterator的remove方法),否則會引發異常。
下面的代碼示範了如何通過迭代器遍曆集合中元素:
package lkl;import java.util.Collection;import java.util.HashSet;import java.util.Iterator;public class IteratorTest { public static void main(String[] args){ Collection c =new HashSet(); c.add("java"); c.add("c"); c.add("c++"); c.add("shell"); ///聲明一個Collection的迭代器 Iterator it = c.iterator(); while(it.hasNext()){ ///從集合中取出的元素都是Object類型的,需要進行類型轉換 String str = (String) it.next(); if(str=="shell"){ ///我們可以通過調用iterator的remove方法來刪除 ///上次迭代返回的元素,但是不能通過別的方法來改變集合中的元素 it.remove(); ///下面這句代碼會引發異常 ///c.add("python"); } str="lkl"; ///我們不能通過改變迭代器的傳回值而改變集合中的元素 } System.out.println(c); }}
java5後還可以通過foreach迴圈來迭代訪問集合中的元素(就和訪問數組中元素一樣),使用foreach方法訪問時注意事項同上面的Iterator方法,下面的代碼示範了這種方法:
package lkl;import java.util.ArrayList;import java.util.Collection;public class ForeachTest { public static void main(String[] args){ Collection c =new ArrayList(); c.add("java"); c.add("c"); c.add("c++"); c.add("shell"); for(Object cc : c){ String str = (String) cc; System.out.println(str); } }}
java集合學習之Collection(1)