今天這篇博客是來為大家分享一下我在《瘋狂java講義》中學習到的集合知識
java集合類是一種十分有用的類,用于存放數量不等的對象,并可以實現常用的數據結構。java集合大致分為set map list queue。set是一種無序的并且元素不可重復的集合(若重復數據 則只有一個有效數據存在),List代表的是有序并且元素可以重復的集合,Map則代表具有一定映射關系的集合,java5又包含Queue體系集合,代表的是隊列集合實現。
java集合類主要由兩個接口派生而成Collection接口和Map接口,這兩種接口是JAVA集合框架的根接口
注:Collection是根接口 矩形框的子接口為常用的集合類
注:Map是根接口 矩形框的子接口為常用的集合類
set集合似一個罐子,把一個對象添加到set集合中,set集合無法記住這個元素的添加順序,所以不允許重復,List集合像一個數組,但其長度可以改變,并且可以記住每次添加元素的順序。Map也像一個罐子,但是其每條數據都是由Key,Value鍵值對組成的。
Collection接口中定義了如下的操作元素集合的方法:
boolean add(object o)添加一個元素到集合中,成功則返回Trueboolean addAll(Collection c)把集合c的所有元素添加到前方指定集合中,成功則返回Truevoid clear()清除集合中的所有元素,將其長度變為oboolean contains(Object o)返回集合中是否包含指定元素oboolean containsAll(Collection c)返回集合是否包含指定的集合c中所有元素boolean isEmpty()返回集合是否為空,若集合長度為0則返回TrueIterator iterator() 返回一個Iterator對象用于遍歷集合中的元素boolean remove(Object o)刪除集合中指定元素o,若有多個待刪除元素則只刪除第一個元素boolean removeAll(Collection c) 從集合中刪除c集合中的所有元素相當于A集合-C集合boolean retainAll(Collection c)從集合中刪除c集合不包含的元素相當于A集合與C集合的交集,方法返回的結果B <= Cint size() 返回集合中元素的個數Object[] toArray()集合轉換為一個數組,集合元素轉變為數組元素接下來上代碼
public class CollectionTest { public static void main(String[] args) { //list 清單是一個有序的元素可重復的集合 Collection c = new ArrayList(); //添加元素 c.add("孫悟空"); //集合中不能存放基本類型 但Java支持自動裝箱成為其包裝類 此中的6位Integer類 c.add(6); //c.size() 輸出元素的個數 返回值int System.out.**運行結果為: c集合的元素個數為:2 c集合的元素個數為:1 c集合是否包含孫悟空這個字符串true c集合元素[孫悟空, 輕量級JAVA EE ] c集合是否包含books集合?false c集合中所有元素[] ** 注:上段代碼中出現了Hashset,和ArrayList,雖然二者的實現類不同,但是當成collection使用的時候,可以使用Collection所提供的所有增刪等方法.并且collection接口重寫了toString方法 個能一次性的輸出元素以數組的形式。使用Lambda表達式遍歷集合:
public class CollectionEach { public static void main(String[] args) { //創建一個set集合 輸出的結果不一定是按照add方法添加的順序,因為set集合是無序的 Collection books = new HashSet(); books.add("輕量級 JAVA ee 企業應用實戰"); books.add("瘋狂JAVA講義"); books.add("瘋狂安卓講義"); //調用forEach方法遍歷 并且使用Lambda表達式 books.forEach(obj -> System.out.println("迭代集合元素" + obj)); }}**運行結果為: 迭代集合元素瘋狂JAVA講義 迭代集合元素瘋狂安卓講義 迭代集合元素輕量級 JAVA ee 企業應用實戰**
使用Iterator遍歷集合元素:
Itertor接口中定義了如下4中方發:
boolean hasNext()判斷被迭代的集合是否還有可迭代元素 有則返回TrueObject next()返回集合中的下一元素void remove() 刪除集合中上一次next()方法返回的元素void forEachRemainin(Consumer action)可以用Lambda表達式來遍歷集合元素public class InteratorEach { public static void main(String[] args) { Collection collection = new HashSet(); collection.add("ABC1"); collection.add("ABC2"); collection.add("ABC3"); //獲取collection集合的迭代器 Iterator it = collection.iterator(); //采用Lambda方式進行迭代 it.forEachRemaining(obj -> System.out.println("Lambda迭代元素" + obj)); }}**運行結果為: Lambda迭代元素ABC1 Lambda迭代元素ABC2 Lambda迭代元素ABC3**
注:Iterator本身并不提供盛裝對象的能力,必須有一個被迭代對象像如上代碼塊中的collection.iterator()則返回一個Iterator,且用Iterator遍歷Collection集合元素時,元素在集合中不可更改,不可變
public class IteratorTest { public static void main(String[] args) { //創建一個集合 Collection books = new HashSet(); books.add("瘋狂JAVA講義"); books.add("瘋狂安卓講義"); books.add("輕量級 JAVA ee 企業應用實戰"); //獲取books集合的迭代器 Iterator it = books.iterator(); while(it.hasNext()){ //it 。 next()方法返回的是object數據類型 需要強制轉換 String book = (String) it.next(); System.out.println(book); if (book.equals("瘋狂安卓講義")){ //從集合中刪除上一次next()方法反悔的元素 it.remove(); } //對book變量賦值 不會改變集合元素本身 book = "12456"; System.out.println(book); } }}**運行結果為: 瘋狂JAVA講義 12456 瘋狂安卓講義 12456 輕量級 JAVA ee 企業應用實戰 12456**
感謝大家捧場 今天的Java干貨筆記就寫到這里了 故事未完,靜待下集。
新聞熱點
疑難解答