什麼是集合呢?html
定義:集合是一個存放對象的引用的容器。java
在Java中,集合位於java.util包下。程序員
提到容器,就會想起數組,那麼集合和數組的區別是什麼呢?(這裏是重點,面試可能問的比較多)面試
空口無憑,咱們來點代碼配合理解,首先,咱們看下以下的數組代碼:數組
String[] platformArray = new String[3]; platformArray[0] = "博客園"; platformArray[1] = "掘金"; platformArray[2] = "微信公衆號"; platformArray[3] = "我的博客";
運行代碼就會發現,platformArray[3] = "我的博客";
會引起java.lang.ArrayIndexOutOfBoundsException
異常。微信
而使用集合時就不存在這個問題,由於集合在聲明時不須要指定長度而且長度會根據放入元素的多少而變化:dom
List<String> platformList = new ArrayList<>(); platformList.add("博客園"); platformList.add("掘金"); platformList.add("微信公衆號"); platformList.add("我的博客");
觀察上面聲明數組的代碼,咱們能夠推斷出下面的代碼確定是編譯不經過的:spa
String[] platformArray = new String[3]; platformArray[0] = "博客園"; platformArray[1] = "掘金"; platformArray[2] = 1;
由於數組聲明時用的是String類型,而platformArray[2] = 1;
賦值時卻使用了int類型。.net
再來看下下面的集合代碼:3d
List<int> intList = new ArrayList<int>(); intList.add(1); intList.add(2); intList.add(3);
這段代碼也是編譯不經過的,在IDEA中,鼠標懸停時會提示以下的錯誤信息:
意思是類型參數不能是原始類型(基本數據類型),那怎麼使用呢?總不能不讓我使用int型的集合吧?
固然不會,Java爲每種基本數據類型都提供了對應的包裝類,這裏修改成int類型對應的包裝類Integer便可:
List<Integer> intList = new ArrayList<Integer>(); intList.add(1); intList.add(2); intList.add(3);
如下爲Java的原始類型(基本數據類型)與其對應的包裝類:
原始類型(基本數據類型) | 包裝類 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
##3. 集合的分類
在Java中,集合主要分爲如下3種:
它們之間的繼承關係能夠參考下圖。
從上圖能夠總結出以下幾點:
List集合包括List接口以及List接口的全部實現類。List集合具備如下特色:
List接口經常使用的實現類有:ArrayList、LinkedList、Vector。
咱們先看下以下示例瞭解下List集合的用法:
package collection; import java.util.*; public class Muster { public static void main(String[] args) { List<String> strList = new ArrayList<>(); strList.add("a"); strList.add("b"); strList.add("c"); int i = (int) (Math.random() * strList.size()); System.out.println("隨機獲取數組中的元素:" + strList.get(i)); strList.remove(2); System.out.println("將索引爲2的元素從列表移除後,數組中的元素是:"); for (int j = 0; j < strList.size(); j++) { System.out.println(strList.get(j)); } } }
以上代碼的輸出結果爲:
隨機獲取數組中的元素:a
將索引爲2的元素從列表移除後,數組中的元素是:
a
b
關於List集合的詳細用法,ArrayList、LinkedList、Vector的區別(這裏是重點,面試可能問的比較多),後續會單獨寫文總結,敬請期待。
Set集合包括Set接口以及Set接口的全部實現類。Set集合具備如下特色:
Set接口經常使用的實現類有:HashSet、LinkedHashSet、TreeSet。
咱們先看下以下示例瞭解下Set集合的用法:
package collection; import java.util.*; public class Muster { public static void main(String[] args) { Set<String> platformList = new HashSet<>(); platformList.add("博客園"); platformList.add("掘金"); platformList.add("微信公衆號"); platformList.add("我的博客"); // 嘗試添加劇復元素 platformList.add("博客園"); platformList.add("掘金"); for (String platform : platformList) { System.out.println(platform); } } }
以上代碼的輸出結果爲:
博客園
我的博客
掘金
微信公衆號
能夠看出,雖然咱們嘗試添加了重複元素,但並無添加成功而且輸出的元素沒有順序。
所以當你的集合中不容許有重複元素而且對排序也沒有要求的話,可使用Set集合。
關於Set集合的詳細用法,HashSet、LinkedHashSet、TreeSet的區別(這裏是重點,面試可能問的比較多),後續會單獨寫文總結,敬請期待。
Map集合包括Map接口以及Map接口的全部實現類。Map集合具備如下特色:
Map接口經常使用的實現類有:HashMap、HashTable、TreeMap。
咱們先看下以下示例瞭解下Map集合的用法:
package collection; import java.util.*; public class Muster { public static void main(String[] args) { Map<Integer, String> platformMap = new HashMap<>(); platformMap.put(1, "博客園"); platformMap.put(2, "掘金"); platformMap.put(3, "微信公衆號"); platformMap.put(4, "我的博客"); // 嘗試添加劇復Map platformMap.put(4, "我的博客"); // 獲取全部的key Set<Integer> keys = platformMap.keySet(); for (Integer integer : keys) { System.out.println("Key:" + integer + ",Value:" + platformMap.get(integer)); } } }
以上代碼的輸出結果爲:
Key:1,Value:博客園
Key:2,Value:掘金
Key:3,Value:微信公衆號
Key:4,Value:我的博客
從日誌能夠看出,當咱們嘗試重加劇復Map時,並無添加成功。
關於Map集合的詳細用法,HashMap、HashTable、TreeMap的區別(這裏是重點,面試可能問的比較多),後續會單獨寫文總結,敬請期待。
Java集合中List,Set以及Map等集合體系詳解(史上最全)
原創不易,若是以爲文章能學到東西的話,歡迎點個贊、評個論、關個注,這是我堅持寫做的最大動力。
若是有興趣,歡迎添加個人微信:zwwhnly,等你來聊技術、職場、工做等話題(PS:我是一名奮鬥在上海的程序員)。
原文出處:https://www.cnblogs.com/zwwhnly/p/11251562.html