【知了堂學習筆記】java中常用集合的理解
最近學習了java中常用集合類的一些知識,在這裏作為一只小白,我來談談我的理解,順帶總結知識點。
引入:在沒有接觸之前,聽到集合,給我感覺是想到了數學中的集合一樣,裏面存放著一個一個的元素。其實不然,這個集合也就差不多,是用來存放元素的容器。
Java中的集合類包含的內容很多而且很重要,很多數據的存儲和處理(排序,去重,篩選等)都需要通過集合類來完成。
今天我要談的主要是,如下圖所示:
1.Collection
Collection是最基本的集合類型,若要檢查Collection中的元素,可以使用forEach遍歷,也可以使用叠代器,實現了Collection接口的類,都可以這樣操作。用法如下:
package 集合; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class CollectionTest_1 { public static void main(String[] args) { Collection<String> collection = new ArrayList<String>(); collection.add("蘋果一"); collection.add("蘋果二"); collection.add("蘋果三"); //第一種方式通過forEach遍歷打印 System.out.println("通過forEach遍歷打印如下:"); for(String str:collection){ System.out.println(str); } System.out.println("-------------------------"); //第二種方式通過iterator遍歷打印 System.out.println("通過iterator叠代器打印如下所示:"); Iterator<String> it = collection.iterator(); while(it.hasNext()){ System.out.println(it.next()); } } }
1.1 List 接口
List是Collection派生的接口,使用此接口能夠精確的控制每個元素插入的位置。用戶能夠使用索引的位置來訪問List中的元素,類似於Java數組。 List允許有相同的元素存在。 除了具有Collection接口必備的的iterator()方法外,還提供了listIterator()方法,放回一個 ListIterator接口。 實現List接口的常用類有LinkedList、ArrayList、Vector和Stack,下面來簡單介紹。1.1.1 ArrayList 類
ArrayList從數據結構上來說,為順序線性結構,用戶若要對數據經常查閱或者是獲取數據時,本類為用戶的最佳選擇類。常用方法: add();addAll();get();size();set();remove();isEmpty();至於它們的例子,我就不一一舉了,更多的方法可通過Api文檔去查閱。
1.1.2 LinkedList 類
LinkedList實現了List類接口,允許null元素。此外LinkedList提供額外的add、get、remove、insert方法在LinkedList的首部或尾部。這些操作使LinkedList可被用作堆棧(stack),隊列(queue)或雙向隊列(deque) LinkedList較ArrayList而言,若用戶對數據經常進行插入或者是是刪除之類的話,那麽用本類為最優選擇。1.1.3 Stack 類
stack翻譯過來為棧,在前面講到堆棧模型的時候,我們就知道了它有先進後出的特點。 Stack繼承自Vector,實現了一個後進先出的堆棧。Stack提供了5個額外的方法使得Vector得以被當做堆棧使用。基本的push和pop方法,還有peek方法得到棧頂的元素,empty方法測試堆棧是否為空,serach方法檢測一個元素在堆棧中的位置。Stack剛創建後是空棧。 請看下面的代碼,簡單理解Stack的常用方法:1 package 集合; 2 3 import java.util.Stack; 4 5 public class StackTest1 { 6 public static void main(String[] args) { 7 Stack<Integer> st = new Stack<Integer>(); 8 st.push(1); 9 st.push(2); 10 st.push(3); 11 st.push(4); 12 st.push(5); 13 14 System.out.println(st.pop());//5 棧頂的那一個是一個最先出來的 15 System.out.println("棧的長度為:"+st.size());//4 計算移除棧中的尺寸 16 //st.peek();是指要將棧中的某一個元素拿出用,但它仍在棧中,棧中的長度與沒執行這條語句之前是一樣的 17 System.out.println(st.peek());//4 18 int value = st.peek();//4 將要用到集合中的值得時候,就用peek()方法 19 int a =10; 20 int result = value+a;//result=3+10=14 21 System.out.println(result);//13 22 System.out.print("棧的長度為:"+st.size());//4 計算移除棧中的尺寸 23 24 } 25 }
輸出結果為:
5
棧的長度為:4
4
14
棧的長度為:4
至於結果,代碼中註釋寫的比較清楚了,這裏我就不在說了。
LinkedList可以被用作堆棧、隊列等。舉個例子:
下面是一個LinkedList集合實現堆棧的代碼:
1 public class LinkedListTest1 { 2 public static void main(String[] args) { 3 LinkedStack ls = new LinkedStack(); 4 Apple apple1 = new Apple("蘋果一"); 5 Apple apple2 = new Apple("蘋果二"); 6 Apple apple3 = new Apple("蘋果三"); 7 ls.push(apple1); 8 ls.push(apple2); 9 ls.push(apple3); 10 11 System.out.println(ls.pop()); 12 System.out.println(ls.pop()); 13 System.out.println(ls.pop()); 14 } 15 } 16 class LinkedStack { 17 private LinkedList<Apple> list = new LinkedList<Apple>(); 18 public void push(Apple apple){ 19 list.addLast(apple); 20 } 21 public Apple pop(){ 22 return list.removeLast(); 23 } 24 } 25 class Apple{ 26 String name; 27 public Apple() { 28 } 29 public Apple(String name) { 30 super(); 31 this.name = name; 32 } 33 public String getName() { 34 return name; 35 } 36 public void setName(String name) { 37 this.name = name; 38 } 39 @Override 40 public String toString() { 41 return "聖誕蘋果 [name=" + name + "]"; 42 } 43 }
輸出結果為:
聖誕蘋果 [name=蘋果三]
聖誕蘋果 [name=蘋果二]
聖誕蘋果 [name=蘋果一]
可以看到,先進後出的特點。
1.2 Set
Set是一種不包括重復元素的Collection,即它裏面的任意兩個元素a,b,都有a.equals(b)=false。
很明顯的可以知道Set有個約束條件,傳入的collection參數不包含重復元素。
1.2.1 HashSet
哈希結構,特點是無序不重復,請看案例:
1 public class HashSetTest_1 { 2 public static void main(String[] args) { 3 Set<String> set = new HashSet<>(); 4 set.add("第一個"); 5 set.add("第二個"); 6 set.add("第三個"); 7 set.add("第一個"); 8 set.add("第四個"); 9 System.out.println(set.size());//4 10 for(String str:set){ 11 System.out.println(str); 12 } 13 } 14 }
輸出結果:
4
第二個
第四個
第三個
第一個
可以看到:1.我在set中添加了五個元素,有相同的元素,值讀出了一個。說明了不重復的特點。
2.輸出的結果順序,與我添加的順序完全不同,則說明了它的無序特點。
2.Map
Map提供key到value的映射。一個Map中不能包含相同的key,每個key只能映射一個value。
2.1 HashMap
多用於通過鍵值獲取值得查詢。與HashMap類似的有HashTable,這裏就不祥說區別了。這個HashMap的用法,我就不貼代碼了,請諒解。
以上,就是作為一只小白,在最近學的知識,做出了自己的一點理解,文中如果有不對的地方,還請各位大佬們,給我指出來。
如果需要更多的學習與資源請點擊以下鏈接:
知了堂官網:
www.zhiliaotang.com
【知了堂學習筆記】java中常用集合的理解